我有以下简单的代码行:
timeout() {
this.tick();
if (this._running) {
this._timeoutId = window.setTimeout(this._boundTimeout, this._gameSpeed);
}
}
startRunning() {
this._timeoutId = window.setTimeout(this._boundTimeout, this._gameSpeed);
this._running = true;
}
我知道在requestAnimationFrame
中,您只需要像这样的回调作为参数
this._timeoutId = window.requestAnimationFrame(timeout);
但是我应该在哪里处理this._gameSpeed
的{{1}}?
[更新] :我设法使用requestAnimationFrame
进行跑步,但是它忽略了FPS,因此几乎无法捕捉其运动。就添加requestAnimationFrame(this._boundTimeout)
而言,如何处理将其添加到this._gameSpeed
?
答案 0 :(得分:0)
您必须自己计算增量时间,并且只有在它大于FPS时才做事。
这是一个带有示例https://jsfiddle.net/qnkf7x9g/
的小提琴这是相关代码。
const FPS = 2; // Frames per second
const delay = 1000/FPS;
let previous = 0;
const loop = () => {
requestAnimationFrame(loop);
const now = Date.now();
if (now - previous < delay) {
// Do nothing
return;
}
previous = now;
// Do something
console.log("Hello");
};
loop(); // Start the loop