【发布时间】:2021-08-30 14:24:53
【问题描述】:
我一直在对 html5 和 canvas 进行游戏开发的一些测试编码,并遇到了一个我无法通过的错误。当我使用 requestAnimationFrame 运行基本动画循环时,对象的速度得到了更新,运动变得流畅,然后我在一台具有 144Hz 刷新率(从 60Hz 到 144Hz)的显示器上运行了脚本),而我的梦想刚刚坠入深渊。
所以我开始阅读 delta time 以及它如何解决游戏中的 fps 问题,它确实有效,但并不完全符合预期。
function update(timestamp = Date.now()){
if(!previous) previous = timestamp;
dt = (timestamp - previous) / 1000;
fps = 1000 / (timestamp - previous);
previous = timestamp;
...
window.requestAnimationFrame(update);
}
window.requestAnimationFrame(update);
我用requestAnimationFrame调用update,但也可以不用(timestamp = Date.now()),得到正确的信息fps => 143.78... dt = 0.006978...
this.vx = 2;
...
this.x += this.vx * dT * fps;
this.y += this.vy * dT * fps;
this.vy += gravity;
...
计算检查 144 和 60 Hz 显示器(2 * 0.0069 * 144 = 2.001 和 2 * 0.016 * 60 = 2.001),但在 60Hz 显示器上运行时延迟太大。 2px 的移动并不像应有的那样平滑;这让我想到了我的问题,这个问题有解决办法吗?
【问题讨论】:
标签: javascript canvas frame-rate timedelta requestanimationframe