javascript - HTML5 Canvas 的 Uncapped 与 SetInterval 帧速率?

标签 javascript html canvas

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

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

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

我正在考虑这样的代码:

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

有更好的方法吗?

最佳答案

查看 window.requestAnimationFrame (RAF)。

顾名思义,RAF 的创建就是为了出色地管理动画。

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

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

关于javascript - HTML5 Canvas 的 Uncapped 与 SetInterval 帧速率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124049/

相关文章:

javascript - 如何在 JavaScript 中将一个字节(8 位)转换为有符号整数?

javascript - 保持图像宽高比并在 div 内

javascript - Firebase SimpleLogin 未定义函数

javascript - Sharepoint 2010 中的文本到 Html 转换

html - 防止复选框标签换行到页面的另一侧

一些JavaScript的编码习惯和奇怪写法

javascript - 如果渲染器进程关闭, Electron 全局变量垃圾会被收集吗?

javascript - JS Canvas 获取像素值非常频繁

c# - 我需要担心 Canvas 上的最佳绘图吗?

html - 如何在 Canvas 元素中添加指向图像的超链接?