在XNA 4.0中避免游戏循环

时间:2012-01-10 12:10:50

标签: c# xna game-loop

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

4 个答案:

答案 0 :(得分:4)

我建议看一下他们在样本中的表现:

App Hub - WinForms Series 1
App Hub - WinForms Series 2

答案 1 :(得分:2)

为什么你想要这个?

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

答案 2 :(得分:1)

你将不得不推出自己的多线程循环;如果你拖延UpdateDraw,另一个也会停滞不前。另一个考虑因素是,如果你的窗口以某种方式被遮挡(在非DWM环境下;例如一个窗口重叠它),拖延Draw会使窗口区域没有涂层。

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

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

答案 3 :(得分:1)

使用WinFormsWPF作为渲染系统的主机,可以最好地解决这种情况。我以前使用过这样的系统,我发现使用SlimDX WPF Interop是我的首选解决方案。使用这种方法可以添加WPF提供的漂亮的UI功能,覆盖渲染到表面的3D模型。