最好的答案是:这取决于。
您不必限制任何一个
更新:如果您的更新没有上限,则游戏逻辑应取决于增量时间量,以避免根据运行计算机的速度更快或更慢地运行游戏。这是许多游戏使用的非常普遍的方法,但它并不是唯一的方法。
渲染:如果渲染没有上限,则帧缓冲区可能以不完整或错误的状态呈现,从而导致撕裂的伪影。这就是为什么许多游戏都采用垂直同步(v-sync)的原因
您可能会限制两者
更新:某些游戏在其部分或全部游戏系统中使用固定的时间步长。正如您所描述的,此方法有效。每秒更新的数量限制在上限,以确保在一流的计算机上运行不会太快。这消除了对增量定时的需要。在固定的时间步长下,某些应用程序更好,而在增量定时下,某些应用程序则更好。选择哪种方法将完全取决于您要实现的目标。在线书籍GameProgrammingPatterns有一章专门介绍了涉及这两种架构的游戏循环。
渲染:应该将每秒帧数设置为上限,以避免上述撕裂问题,但是,您的应用程序不应尝试通过某些CPU锁定来手动执行此操作。而是启用v-sync,并使底层硬件与监视器的刷新率同步。这样,您的游戏将与未来的显示器向前兼容,后者可能会以比目前常见的60Hz更高的频率运行。还值得注意的是,许多游戏玩家,尤其是那些进行基准测试的玩家,仍然更喜欢在不使用v-sync的情况下运行,以实现尽可能高的帧频。因此允许在运行时启用或禁用该功能是明智的。
你不应该限制的
如果您的游戏使用基于轮询的方法来输入用户信息,例如:getInput()
在更新步骤中调用a 来更新控制器状态,则更好(如果不受限制)。或者如果受限制,则设置为很高的上限。您查询用户输入并对其进行操作的频率越高,游戏“响应”的响应速度和流畅度就越高。我们今天听到的所谓的60Hz游戏并没有以这种速度更新AI和所有世界状态,有些甚至还没有达到那么快的速度,但是它们每秒至少查询控制器输入60次并相应地更新玩家头像。当然,这仅与快节奏的动作游戏有关。