每秒有多少游戏更新?
我应该以固定速率的游戏逻辑运行什么更新速率?
过去,我每秒使用60次更新,但这很难,因为每秒更新数不是偶数(16.666666)。我目前的游戏使用100,但对于大多数情况来说似乎有点过头了。
解决方案
回答
请记住,除非对代码进行精确测量,否则每个游戏循环都不会花费相同的毫秒数来完成,因此16.6666的非理性并不是真正的问题,因为无论如何我们都需要时间和补偿。除此之外,每秒更新次数不是16.6666,而是游戏循环应定位的平均毫秒数。
回答
通常最好通过猜测和检查策略找到此类变量。
以与刷新无关的方式来实现游戏逻辑(例如,将ms / update公开为变量,并在任何计算中使用它),然后尝试刷新直到其起作用,然后将其保持在该位置。
作为一种短期解决方案,如果我们想要一个均匀的更新速率,但是不关心每秒更新的均匀性,则15ms接近60个更新/秒。如果两者兼而有之,则最接近的选择是20毫秒或者50次更新/秒,这可能是我们将要获得的最接近的选择。
无论哪种情况,我都只是将时间视为两倍(或者高分辨率的时间),然后将游戏的速率作为变量提供,而不是对其进行硬编码。
回答
理想的是以与监视器相同的刷新率运行。这样一来,视觉效果和游戏更新就不会相互错位。每个帧都不会持续整数毫秒的事实对我们来说并不重要;为什么这是一个问题?
回答
以上都不是。为了尽可能流畅地进行游戏,游戏应基于时间,而不是帧锁定。帧锁定适用于简单的游戏,我们可以在其中调整逻辑并锁定帧速率。对于现代3D字幕来说,它的效果不佳,因为帧率会在整个板上跳跃,并且屏幕可能无法进行VSync。
我们需要做的就是弄清楚一个对象应该走多快(即每秒虚拟单位),计算自上一帧以来的时间,缩放虚拟单位的数量以匹配经过的时间,然后将这些值添加到对象的位置。瞧!基于时间的运动。
回答
我通常使用30或者33. 对于用户来说,感觉到流量足够了,而且这种情况很少发生,以至于不会过多占用CPU。
回答
通常,我不限制游戏的FPS,而是更改所有逻辑以将自上一帧过去的时间作为输入。
就固定利率而言,除非出于任何原因需要较高的利率,否则应使用25/30之类的值。那应该足够高的速率,这将使游戏在CPU使用率上更轻一些。
回答
我喜欢50固定速率的电脑游戏。我真的不能说出50和60之间的区别(如果我们制作的游戏可以/关心,则可能应该是100)。
我们会注意到问题是"固定速率游戏逻辑"而不是"绘制循环"。为了清楚起见,代码如下所示:
while(1) { while(CurrentTime() < lastUpdate + TICK_LENGTH) { UpdateGame(); lastUpdate += TICK_LENGTH; } Draw(); }
问题是TICK_LENGTH应该是什么?
回答
我曾经维护过Quake3 mod,这是用户问题的源泉。
Q3默认情况下使用每秒20个"滴答声",图形子系统进行插值,因此我们可以在屏幕上获得平稳的运动。我最初以为这是很低的水平,但事实证明还不错,而且实际上根本没有很多游戏的动作速度快于第3季度
我个人会选择"对约翰·卡马克来说足够好,对我来说足够好"