我应该如何编写主游戏循环?[关闭]


130

我应该如何编写主游戏循环?您应该在游戏循环中执行哪些操作,以及在游戏循环中不应执行的操作?

我已经写了很多,但我从未真正阅读过游戏循环。我敢肯定我可以大大改善它们,但不确定如何。


4
邪恶的答案:如何使用某人的引擎为您创建此循环?:)
user712092 2011年

您可以询问用户要运行的帧总数,并使用for循环至n倍的缓冲区数量。
维吾尔族Gümüşhan

Answers:


121

游戏的主要循环处理三个主要任务:

  1. 获取用户输入
  2. 更新游戏状态
  3. 画游戏

一个简单的游戏循环将这三个任务融合为一个while循环。这会产生一些不良结果:

  1. 游戏在不同的计算机上以不同的速度运行。
  2. CPU(可以不必要)固定为100%使用率。
  3. “游戏状态” /菜单丢失或与游戏代码混合。
  4. 主游戏循环非常长且难以维护。
  5. 代码很难扩展/移植到其他平台。

高级游戏循环可解决上述问题。以下是一些有用的文章:

有关出色的示例游戏循环,请看一下Allegro滑板游戏演示游戏:

对于大多数游戏,游戏循环通常都执行相同的工作,因此我一直在思考一种制作通用游戏框架的方法。最好编写一个游戏循环的实现并在游戏之间共享。它可以节省创建新游戏时的工作,并且所有游戏都可以共享对共享游戏循环的改进(例如,添加FPS计数器或屏幕捕获功能)。


1
是的,我怀疑,我绝对可以改善。好读。另外,感谢您发布代码。很高兴看到带有这些内容的实际游戏代码。
hokiecsgrad

1
CPU 应该保持 100%的使用率(如果您至少有2个内核,则应该保持在50%以上)。想一想。如果您坐在那里对自己说:“哦,但是我不想使用所有的CPU。” 如何获得前沿的物理知识,杀手级的图形。是的,如果可能的话,您应该使用100%的CPU(尽管这意味着在当今的计算机上使用多线程,所以很难一直使用4个内核中的100%)。可以充分利用正在运行的计算机。
bobobobo

5
请允许我附加: 对于桌面程序。在便携式设备上,您将消耗更多的电池,因此您会担心100%使用率的问题。
bobobobo

1
@ user6003859:我修复了链接。
Leftium

1
另一个有用的链接:gameprogrammingpatterns.com/game-loop.html
brita_

51

我建议格伦·菲德勒(Glenn Fiedler)撰写有关稳固帧速率独立性的文章“ 修复您的时间步长!

(与手头主题无关,但是该系列中的其他文章也相当不错-他网站上的所有内容都一样!)


这些绝对是一些非常好的文章。感谢您的发布!
hokiecsgrad

1
对于具有可靠的独立于帧率的实现,我建议第二。游戏中的所有内容都应实现为您定期更新的增量值。而且,不一定必须在进入下一帧的同时进行。实际上,如果您跳过一帧,则可能真的不想简单地使用2x增量调用更新方法。用相同的增量调用两次更新会更加一致。一定要花时间来学习帧速率和更新周期方面的问题。它将为您节省时间。
丹尼斯·蒙西

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.