【发布时间】:2012-01-10 12:10:49
【问题描述】:
我在 XNA 4.0 上开发了一个简单的 3D 模型查看器。有没有办法使用 Draw 和 Update 函数来避免游戏无限循环?我需要渲染 3D 图形,但没有无限渲染场景。我的意思是我需要重新绘制场景,然后它才真正改变了。
【问题讨论】:
我在 XNA 4.0 上开发了一个简单的 3D 模型查看器。有没有办法使用 Draw 和 Update 函数来避免游戏无限循环?我需要渲染 3D 图形,但没有无限渲染场景。我的意思是我需要重新绘制场景,然后它才真正改变了。
【问题讨论】:
我建议在他们的示例中看看他们是如何做到的:
【讨论】:
你到底为什么想要这个?
如果您使用 winforms 应用程序,您可以更好地控制更新和绘制循环,但您也可以先将场景渲染为纹理,然后完全停止渲染。
【讨论】:
您将不得不滚动自己的多线程循环;如果您停止Update 或Draw,另一个也会停止。另一个考虑因素是,如果您的窗口以某种方式被遮挡(在非 DWM 环境下;例如,与它重叠的窗口)停止 Draw 将使您的窗口区域未上漆。
如果你想继续这样做;你要做的是在第一次调用Update 时启动Thread,然后使用ManualResetEvent 来同步两者。
一个更强大的选项是在场景更新时将整个场景渲染为RenderTarget2D;如果自上次调用 Update 或 Draw 以来场景没有改变,则只需渲染 RenderTarget2D 而不是整个场景。这仍然是一个无限循环,但它趋向于您的要求(即使它不满足它)。
【讨论】:
最好使用WinForms 或WPF 作为渲染系统的主机来解决这种情况。我以前使用过这样的系统,我发现使用SlimDX 和WPF Interop 是我的首选解决方案。使用这种方法可以添加 WPF 提供的漂亮 UI 功能,覆盖在渲染到表面的 3D 模型上。
【讨论】: