【问题标题】:Avoiding game loop in XNA 4.0避免 XNA 4.0 中的游戏循环
【发布时间】:2012-01-10 12:10:49
【问题描述】:

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

【问题讨论】:

    标签: c# xna game-loop


    【解决方案1】:

    我建议在他们的示例中看看他们是如何做到的:

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

    【讨论】:

      【解决方案2】:

      你到底为什么想要这个?

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

      【讨论】:

        【解决方案3】:

        您将不得不滚动自己的多线程循环;如果您停止Update 或Draw,另一个也会停止。另一个考虑因素是,如果您的窗口以某种方式被遮挡(在非 DWM 环境下;例如,与它重叠的窗口)停止 Draw 将使您的窗口区域未上漆。

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-15
            • 1970-01-01
            • 2014-01-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多