每秒有多少游戏更新?

时间:2020-03-05 19:00:11  来源:igfitidea点击:

我应该以固定速率的游戏逻辑运行什么更新速率?

过去,我每秒使用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季度

我个人会选择"对约翰·卡马克来说足够好,对我来说足够好"