避免 XNA 4.0 中的游戏循环
本文关键字:游戏 循环 XNA 避免 | 更新日期: 2023-09-27 18:19:50
我在XNA 4.0上开发了一个简单的3D模型查看器。有没有办法避免使用绘制和更新功能进行无限游戏循环?我需要渲染3D图形,但没有无限渲染场景。我的意思是我需要重新绘制场景,然后它才真正改变了。
我建议看看他们在样本中是如何做到的:
应用中心 - WinForms 系列 1
应用中心 - WinForms 系列 2
你到底为什么要这个?
如果使用 winforms 应用程序,则可以更好地控制更新和绘制循环,但也可以先将场景渲染为纹理,然后完全停止渲染。
你将不得不滚动自己的多线程循环;如果你停滞Update
或Draw
另一个也会停滞。另一个注意事项是,如果您的窗口以某种方式被遮挡(在非 DWM 环境中;例如,窗口与它重叠(,停止Draw
将使窗口区域未上漆。
如果你想继续这样做;你要做的是在第一次调用Update
时启动一个Thread
,然后使用ManualResetEvent
来同步两者。
一个更强大的选项是在场景更新时将整个场景渲染为RenderTarget2D
;如果自上次Update
或Draw
调用以来场景未被更改,只需渲染RenderTarget2D
而不是整个场景。这仍然是一个无限循环,但它倾向于您的要求(即使它不满足它(。
最好使用 WinForms 或 WPF 作为呈现系统的主机来解决此类方案。我以前使用过这样的系统,我发现将SlimDX与WPF Interop一起使用是我的首选解决方案。使用此方法允许添加 WPF 提供的漂亮 UI 功能,覆盖在呈现到图面的 3D 模型上。