是否可以让游戏循环尽可能快地运行?目前我可以设置我想要的 fps,因此在我的游戏将发送到的所有设备上都有一个恒定的 fps。然而,在速度更快的移动设备上,拥有更流畅的图形会更好。我看了看框架独立更新。使用独立于帧的更新时,不需要暂停一段时间(以达到所需的fps),如果更新和渲染在游戏线程中花费很长时间,是否不需要只更新而不渲染?请把我清理干净。
问问题
1837 次
3 回答
2
我的经验(我并不孤单)通常是个坏主意:
- 测试/识别错误要困难得多:
- 你会忘记在某些事情上考虑帧时间,如果你的游戏通常以相当均匀的帧率运行,偶尔会出现下降/峰值,那么你需要很长时间才能发现这些问题。但是,对于使用比您的测试设备快/慢的设备的人来说,它们将非常明显。
- 您对涉及浮点错误/等的各种难以发现的错误敞开心扉。错误可能仍会出现在固定 FPS 循环中,但它们会在每一帧发生,而不是仅在恰好花费 3124 纳秒的帧上发生。
- 对于非固定更新间隔,实时物理模拟非常困难。相信我这个!您可以通过使用固定时间步长进行物理更新来解决此问题,但这也有其自身的风险。
- 您必须计算否则可能是常数的东西。根据具体情况非常小,但可以加起来。(这将取决于您正在制作的游戏的性质)。
- 如果您始终以 100% 的速度运行 CPU,它将更快地消耗用户的电池。
我的建议是以适当的固定帧速率运行您的逻辑并尽可能频繁地渲染,尽管没有必要频繁地渲染而不是更新逻辑。如果有“空闲”时间,那就睡吧。用户的电池会感谢你,用户不会想知道为什么他们的手机在玩你的游戏时会这么热!
让它感觉流畅的关键是确保逻辑更新的固定帧速率足够高。事实是,高于一定帧率的用户不会注意到差异。足够高的高度取决于您的游戏的确切性质,但 30 fps 对于动作游戏来说相当普遍。用户可以看到移动/变化的事物越快,固定帧率想要的速度就越快——例如,第一人称射击游戏总是比策略游戏想要更高的帧率。
您可以采取的另一个选择是创建逻辑“快照”并在渲染时在它们之间进行插值。这是用于平滑多人游戏的常用技术,如此处所述。它还使其成为比更新逻辑更频繁的有效选项!
编辑:希望澄清一些事情。
于 2012-05-24T15:53:22.840 回答
1
您绝对不应该对帧速率施加任何人为限制。尽可能快地跑。跟踪每帧花费的时间(使用增量),然后您可以使用它来准确计算下一帧相对于时间的状态。
于 2012-05-24T15:09:10.367 回答
0
那是对的。当您尽可能快地渲染时 - 您实际上是根据与当前时间成比例的值更新每个对象。
所以当你有一个旋转的立方体时——它每秒旋转 X 度,而不是每帧 X 度。这将确保在较差的机器上,中间帧被跳过并且立方体的旋转会显得不稳定。但在好的机器上,你会看到平稳的旋转。
于 2012-05-24T15:11:01.087 回答