我是初學者,試圖學習c#和xna。我正在嘗試深入瞭解XNA遊戲循環。XNA「遊戲循環」的實際代碼在哪裏?
儘管有很多文章解釋遊戲循環是什麼,但我似乎無法在任何地方找到實際的循環實現。
我想我已經去發現迴路中的最接近的是遊戲類MSDN文檔中的成員:
public void Tick()
,如果這是正確的我在哪裏可以找到內實施這一方法的看看它如何調用Update和Draw方法,或者這是不可能的?
我是初學者,試圖學習c#和xna。我正在嘗試深入瞭解XNA遊戲循環。XNA「遊戲循環」的實際代碼在哪裏?
儘管有很多文章解釋遊戲循環是什麼,但我似乎無法在任何地方找到實際的循環實現。
我想我已經去發現迴路中的最接近的是遊戲類MSDN文檔中的成員:
public void Tick()
,如果這是正確的我在哪裏可以找到內實施這一方法的看看它如何調用Update和Draw方法,或者這是不可能的?
Monogame是基於現代渲染流水線的XNA的開源副本,SharpDX.Toolkit爲DX11實現了非常類似XNA的接口(Monogame實際上在DirectX集成的底層使用了SharpDX)......您可能會發現來自這些項目的源代碼中的遊戲循環,並且它可能接近於與MS XNA實際使用的相同(如果不相同)。這就是說,遊戲循環對於簡單的演示應用程序實際上並沒有太多的工作(他們傾向於用一種方法來堆砌所有東西來更新/渲染一個簡單的場景),儘管在完整的遊戲中使用基於組件的場景圖它會變得有點複雜。對於單線程引擎的總體思路是:
1. update the state of any inputs, 2. process any physics simulation if needed, 3. call update on all the updatable objects in your scene graph (the engine I'm working on uses interfaces to avoid making wasteful calls on empty stub methods), 4. clear the working viewport/depth buffers, 5. call render on each renderable object to actually get the GPU drawing on the back buffer. 6. swap the render buffers putting everything just drawn to the back buffer up on screen, and making the old viewport buffer the new back buffer to be cleared and drawn on the next rendering pass. 7. start over at step 1 :)
這幾乎涵蓋了基礎知識,並應普遍適用不管底層的API或引擎,你正在使用。
這將是圖形驅動程序的回調。我不確定XNAs update()和回調之間有多少層。這不是學習c#和XNA所需的知識。 XNA的重點在於所有隱藏在封面之下的東西。 – quin 2014-09-24 16:41:10