2012-01-10 109 views
4

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

回答

2

为什么你要这个?

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

1

你将不得不推出自己的多线程循环;如果你失败UpdateDraw另一个也会停滞。另一个考虑是,如果你的窗口被某种方式弄得模糊不清(在非DWM环境下;例如与之重叠的窗口),拖延Draw将使窗口的区域未上色。

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

更强大的选项是在场景更新时将整个场景渲染到RenderTarget2D;如果场景自上次调用UpdateDraw以来没有发生变化,则只需渲染RenderTarget2D而不是整个场景。这仍然是一个无限循环,但它趋向于您的要求(即使它不符合要求)。

1

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