我是初学者,正在尝试学习C#
和XNA
。我试图更深入地了解XNA游戏循环。
尽管有很多文章解释了游戏循环是什么,但我似乎无法在任何地方找到实际的循环实现。
我认为最接近寻找循环的是MSDN
文档中游戏类的成员:
public void Tick ()
如果这是正确的,我在哪里可以找到此方法的内部实现,以查看它如何调用Update和Draw方法,或者这是不可能的?
答案 0 :(得分:0)
话虽这么说,游戏循环实际上并没有为简单的演示应用程序做很多事情(它们倾向于在一个方法中堆积所有东西来更新/渲染一个简单的场景),尽管在基于组件的场景的完整游戏中图表可能会有点复杂。对于单线程引擎,一般的想法是:
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或引擎,都应该适用。
答案 1 :(得分:0)
由于XNA
是封闭源代码,因此无法看到Game
类中定义的游戏循环代码。您引用的Tick()
在任何XNA
文档中都没有公开或引用(尽管我可能不知道它可能在幕后使用)。
正如@Ascendion所指出的,MonoGame
有一个等效的类,名为Game
,请参见here。虽然这可能无法完全反映XNA
代码,但它是我们公众可获得的最佳兼容性源(两者之间执行的所有测试均返回相同的值)。
MonoGame
实现的主要副作用是平台无关的代码,由于某些实现代码位于其他文件中,因此可能难以理解。追溯源代码到预期的平台源代码并不难。
这篇文章是为了澄清所有以后可能会偶然发现的人。