游戏循环框架独立

时间:2012-05-24 15:06:25

标签: java android multithreading game-loop

是否可以让游戏循环尽可能快地运行?目前我可以设置我想要的fps,因此在我的游戏将发送到的所有设备上具有恒定的fps。然而,在速度更快的移动设备上,拥有更流畅的图形会更好。我看了一下帧独立更新。当使用帧独立更新时,不需要暂停一段时间(以实现所需的fps)并且如果更新和渲染在游戏线程中花费很长时间,则不需要更新和不渲染?请把我弄清楚。

3 个答案:

答案 0 :(得分:2)

我的经验(而且我并不孤单)是,这通常是一个坏主意:

  • 测试/识别错误很多更难:
    • 忘记考虑某些事情的帧时间,如果你的游戏通常以相当均匀的帧率运行,偶尔会出现下降/尖峰,那么你需要很长时间才能发现这些的问题。然而,对于使用比测试设备快得多/慢的设备的人来说,它们将非常明显。
    • 您可以了解各种难以发现的涉及浮点错误等的错误。错误可能仍然出现在固定的FPS循环中,但它们将在每一帧发生,而不是仅发生在恰好需要3124纳秒的帧上。
  • 对于非固定更新间隔,实时物理模拟非常困难。相信我这个!您可以通过使用固定时间步骤进行物理更新来解决这个问题,但这会带来风险。
  • 你必须计算可能是常量的东西。根据具体情况非常小,但可以加起来。 (这取决于你正在制作的游戏的性质)。
  • 如果你总是以100%的速度运行CPU,它会更快地咀嚼用户的电池。

我的建议是以一个合适的固定帧速率运行你的逻辑并尽可能经常渲染,尽管没有比你更新逻辑更频繁的渲染。如果有“空闲”时间,那就睡觉吧。用户的电池将会感谢您,并且用户不会想知道为什么他们的手机在玩游戏时会变得如此热门!

让它感觉顺畅的关键是确保逻辑更新的固定帧率足够高。事实是,高于特定帧率用户将不会注意到差异。高到多高将取决于游戏的确切性质,但30 fps对动作游戏来说相当普遍。用户可以看到移动/改变的速度越快,固定帧速率想要的越快 - 例如第一人称射击游戏总是希望获得比战略游戏更高的帧率。

您可以采用的另一个选项是创建逻辑“快照”,并在渲染时在它们之间进行插值。这是用于平滑多人游戏的常用技术,如here所述。与更新逻辑相比,它还使渲染更频繁!

编辑:希望澄清一些事情。

答案 1 :(得分:1)

您绝对不应对帧速率施加任何人为限制。尽可能快地跑。跟踪每帧所用的时间(使用增量),然后您可以使用它来准确计算下一帧相对于时间的状态。

答案 2 :(得分:0)

这是正确的。当您尽可能快地渲染时 - 您实际上是基于与当前时间成比例的值更新每个对象。

所以当你有一个旋转的立方体时 - 它每秒旋转X度而不是每帧X度。这将确保在不良机器上跳过中间框架并且立方体的旋转将显得不连贯。但是在好的机器上,你会看到平稳的旋转。