避免在XNA 4.0中使用游戏循环

4

我正在开发一个基于XNA 4.0的简单3D模型查看器。是否有办法避免在绘制和更新函数中出现无限游戏循环?我需要呈现三维图形,但不需要无限制地重复渲染场景。也就是说,只有当场景发生真正的变化时,我才需要重新绘制场景。

4个回答

4

2

你为什么想要这个东西?

如果你使用winforms应用程序,你可以更好地控制更新和绘制循环,但你也可以先将场景渲染到纹理上,然后完全停止渲染。


1

你需要自己编写多线程循环;如果你阻塞了 Update 或者 Draw 中的一个,另一个也会被阻塞。另外需要考虑的是,如果你的窗口在某种情况下被遮挡(在非 DWM 环境下,例如有一个窗口与其重叠),阻塞 Draw 将会导致窗口中的部分区域未被绘制。

如果你想继续进行这个操作,你可以在第一次调用 Update 时启动一个 Thread,随后使用 ManualResetEvent 同步两个线程。

一个更加健壮的选项是,在场景更新时将整个场景渲染到 RenderTarget2D 上;如果上一次的 Update 或者 Draw 调用后场景没有改变,只需要渲染 RenderTarget2D 而不是整个场景。这仍然是一个无限循环,但它趋向于满足你的要求(尽管不完全满足)。


1
这种情况最好使用WinFormsWPF作为您的渲染系统的主机来解决。我以前就使用过这样的系统,我发现使用SlimDXWPF Interop是我首选的解决方案。使用这种方法可以在渲染到表面的3D模型上叠加由WPF提供的漂亮的UI特性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接