避免 XNA 4.0 中的游戏循环

本文关键字:游戏 循环 XNA 避免 | 更新日期: 2023-09-27 18:19:50

我在XNA 4.0上开发了一个简单的3D模型查看器。有没有办法避免使用绘制和更新功能进行无限游戏循环?我需要渲染3D图形,但没有无限渲染场景。我的意思是我需要重新绘制场景,然后它才真正改变了。

避免 XNA 4.0 中的游戏循环

我建议看看他们在样本中是如何做到的:

应用中心 - WinForms 系列 1
应用中心 - WinForms 系列 2

你到底为什么要这个?

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

你将不得不滚动自己的多线程循环;如果你停滞UpdateDraw另一个也会停滞。另一个注意事项是,如果您的窗口以某种方式被遮挡(在非 DWM 环境中;例如,窗口与它重叠(,停止Draw将使窗口区域未上漆。

如果你想继续这样做;你要做的是在第一次调用Update时启动一个Thread,然后使用ManualResetEvent来同步两者。

一个更强大的选项是在场景更新时将整个场景渲染为RenderTarget2D;如果自上次UpdateDraw调用以来场景未被更改,只需渲染RenderTarget2D而不是整个场景。这仍然是一个无限循环,但它倾向于您的要求(即使它不满足它(。

最好使用 WinForms 或 WPF 作为呈现系统的主机来解决此类方案。我以前使用过这样的系统,我发现将SlimDX与WPF Interop一起使用是我的首选解决方案。使用此方法允许添加 WPF 提供的漂亮 UI 功能,覆盖在呈现到图面的 3D 模型上。