2014-09-19 52 views
-1

我是初学者,试图学习c#和xna。我正在尝试深入了解XNA游戏循环。XNA“游戏循环”的实际代码在哪里?

尽管有很多文章解释游戏循环是什么,但我似乎无法在任何地方找到实际的循环实现。

我想我已经去发现回路中的最接近的是游戏类MSDN文档中的成员:

public void Tick() 

,如果这是正确的我在哪里可以找到内实施这一方法的看看它如何调用Update和Draw方法,或者这是不可能的?

+0

这将是图形驱动程序的回调。我不确定XNAs update()和回调之间有多少层。这不是学习c#和XNA所需的知识。 XNA的重点在于所有隐藏在封面之下的东西。 – quin 2014-09-24 16:41:10

回答

0

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或引擎,你正在使用。

+0

OP在哪里提到“Monogame”? – MickyD 2014-09-20 05:49:15

+0

他向游戏循环实现要求源代码,类似于XNA使用的代码,我命名了2个类似XNA的开源项目,并实现游戏循环 – Ascendion 2014-09-20 07:28:08