HTML5画布的无上限vs SetInterval帧速率?

时间:2014-03-02 04:57:44

标签: javascript html5 canvas

查看this HTML5 game tutorial并使用以下代码以每秒30帧的速度更新帧:

var FPS = 30;
setInterval(function() {
    update();
    draw();
}, 1000/FPS);

从传统视频游戏的角度来看,限制游戏的帧速率是不好的做法(当游戏通常是糟糕的控制台端口时,它真的很烦人)。我想知道这是否是HTML5画布游戏的必需品。无限制的帧率会做一些非常糟糕的事情,例如锁定浏览器或耗尽所有计算机的资源吗?

我在考虑这样的代码:

update();
function update()
{
    // Move stuff around
    draw();
}
function draw()
{
    // Draw the changes
    update();
}

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

查看window.requestAnimationFrame(RAF)。

顾名思义,RAF的创建是为了管理动画做得不错。

RAF试图为您提供最好的上限和无上限计时器。

  • RAF创建一个与显示刷新同步的动画循环。
  • RAF等待异步,因此在等待下一帧时不会阻止您的UI线程。
  • RAF将自动尝试以大约60fps的速度循环。
  • 最新的RAF为您提供了一个已用的计时器,您可以使用它来跳过此循环,如果您需要更少的fps(2)在最后一帧被跳过时赶上动画 - 例如由于系统垃圾收集。