4

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

4

4 回答 4

4

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

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

于 2012-01-10T12:16:01.740 回答
2

你到底为什么想要这个?

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

于 2012-01-10T12:14:30.367 回答
1

您将不得不滚动自己的多线程循环;如果您停止其中一个UpdateDraw另一个也会停止。另一个考虑因素是,如果您的窗口以某种方式被遮挡(在非 DWM 环境下;例如重叠的窗口),则停止Draw窗口将留下未绘制的窗口区域。

如果你想继续这样做;你要做的是开始 aThread第一次Update被调用,然后使用 aManualResetEvent来同步两者。

一个更强大的选择是将整个场景渲染到RenderTarget2D场景更新的时间;如果场景自上次UpdateDraw调用后未更改,则只需渲染RenderTarget2D而不是整个场景。这仍然是一个无限循环,但它趋向于您的要求(即使它不满足它)。

于 2012-01-10T12:49:11.040 回答
1

这种情况最好通过使用WinFormsWPF作为渲染系统的主机来解决。我之前曾使用过此类系统,我发现将SlimDXWPF Interop结合使用是我的首选解决方案。使用这种方法可以添加 WPF 提供的漂亮 UI 功能,覆盖在渲染到表面的 3D 模型上。

于 2012-01-10T12:59:17.377 回答