我之前将.rate设置为10,所以我希望每10帧更新一次游戏逻辑。
是否有优化的方法来实现这一目标?
我理解许多游戏循环使用deltatime而不明确关心帧 - 我宁愿避免这种情况,因为我的游戏逻辑依赖于从1帧到下一帧的输入差异(播放器输入以增量单位记录,这使得回放更容易)。
如果增量时间超过多个速率,则仅在所有逻辑更新后调用一次更新HTML5画布的绘制调用。
loop() {
this.now = Date.now();
var delta = this.now - this.last;
this.last = this.now;
this.dt = this.dt + delta;
if (this.dt < this.rate) {
window.requestAnimationFrame(this.loop.bind(this));
return;
}
while (this.dt > this.rate) {
this.game.loop(delta);
this.dt -= delta;
}
this.draw();
this.loopInput();
window.requestAnimationFrame(this.loop.bind(this));
}
答案 0 :(得分:0)
嗯,如果你只关心每10帧更新你的游戏逻辑,为什么不这样做:
var i = 0;
loop() {
i++;
if(i < 10){
i++;
requestAnimationFrame(loop);
return;
}
//actual rendering logic here
i = 0;
}
requestAnimationFrame(loop);
有趣的是,根据mdn,回调被触发的当前时间作为参数传递给你的回调函数。这意味着您不需要使用Date.now() https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame