2

我正在使用 requestAnimationFrame 在我的游戏中绘制玩家。其中一名球员的移动速度比其他人都快。我和他做了一些检查,他告诉我他的显示器有 120hz 的刷新率。我假设这意味着可以比其他方法更快地处理帧,从而提高移动速度。关于如何解决这个问题的任何想法?

谢谢

使用的垫片层如下:

// shim layer with setTimeout fallback
window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function(/* function */ callback, /* DOMElement */ element){
            window.setTimeout(callback, 1000 / 60);
          };
})();
4

4 回答 4

1

requestAnimationFrame没有保证率。如果愿意,它可以以 2Hz 的频率发射。

您需要使您的游戏循环功能独立于调用之间的时间。大多数游戏通过计算渲染步骤之间经过的毫秒数来做到这一点,然后根据经过的时间为游戏对象设置动画。

于 2013-05-22T15:38:21.857 回答
1

没有保证的帧率。但是,您可以使用一个简单的计时器来强制一个近似的帧速率:How to solve different FPS in requestAnimationFrame on different browsers?

于 2013-05-22T15:40:31.407 回答
0

将 requestAnimationFrame 视为更新/重绘的机会。您仍然应该根据经过的时间来更新过程。

例如,如果玩家可以在 1 秒内移动 100px,而 RAF 每 0.1 秒触发一次,则您需要每次更新 10px

于 2013-05-22T15:38:32.063 回答
0

正确,requestAnimationFrame没有保证的速率,但是您可以requestAnimationFrame使用它的回调的时间戳参数来测量调用之间的时间差,然后创建一个动画来计算在该时间长度内应该发生的事情。

此 CodePen 链接显示了该https://codepen.io/sassano/pen/wvgxxMp的示例。

于 2021-04-17T19:12:44.870 回答