我正在开发一个基于XNA 4.0的简单3D模型查看器。是否有办法避免在绘制和更新函数中出现无限游戏循环?我需要呈现三维图形,但不需要无限制地重复渲染场景。也就是说,只有当场景发生真正的变化时,我才需要重新绘制场景。
你为什么想要这个东西?
如果你使用winforms应用程序,你可以更好地控制更新和绘制循环,但你也可以先将场景渲染到纹理上,然后完全停止渲染。
你需要自己编写多线程循环;如果你阻塞了 Update
或者 Draw
中的一个,另一个也会被阻塞。另外需要考虑的是,如果你的窗口在某种情况下被遮挡(在非 DWM 环境下,例如有一个窗口与其重叠),阻塞 Draw
将会导致窗口中的部分区域未被绘制。
如果你想继续进行这个操作,你可以在第一次调用 Update
时启动一个 Thread
,随后使用 ManualResetEvent
同步两个线程。
一个更加健壮的选项是,在场景更新时将整个场景渲染到 RenderTarget2D
上;如果上一次的 Update
或者 Draw
调用后场景没有改变,只需要渲染 RenderTarget2D
而不是整个场景。这仍然是一个无限循环,但它趋向于满足你的要求(尽管不完全满足)。