XNA“游戏循环”的实际代码在哪里?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XNA“游戏循环”的实际代码在哪里?相关的知识,希望对你有一定的参考价值。
我是初学者,正在努力学习C#
和XNA
。我试图更深入地了解XNA游戏循环。
虽然有很多文章解释了游戏循环是什么,但我似乎无法在任何地方找到实际的循环实现。
我认为我最接近找到循环的是MSDN
文档中游戏类的这个成员:
public void Tick ()
如果这是正确的,我在哪里可以找到此方法的内部实现,以查看它如何调用Update和Draw方法,或者这是不可能的?
Monogame是基于现代渲染管道的XNA的开源复制品,而SharpDX.Toolkit为DX11实现了一个非常类似XNA的界面(Monogame实际上使用SharpDX进行DirectX集成)...你可以找到游戏循环来自其中任何一个项目的源代码,如果与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或引擎,都应该适用。
由于XNA
是封闭源代码,因此无法查看Game
类中定义的游戏循环代码。您引用的Tick()
未在任何XNA
文档中公开或引用(虽然,它可能在幕后使用,我不知道)。
正如@Ascendion指出的那样,MonoGame
有一个名为Game
的等同类,请参阅here。虽然,这可能不完全反映XNA
代码,但它是最好的兼容源(两者之间执行的所有测试,它们返回相同的值),我们公众可用。
MonoGame
实现的主要副作用是平台无关代码,这可能很难理解,因为一些实现代码位于其他文件中。将源追溯到预期的平台源代码并不难。
这篇文章将作为对所有可能在以后偶然发现的人的澄清。
以上是关于XNA“游戏循环”的实际代码在哪里?的主要内容,如果未能解决你的问题,请参考以下文章