2012-01-10 113 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模型。