我可以更好地优化这个游戏滴答圈吗?

时间:2016-07-04 03:32:00

标签: javascript html5-canvas requestanimationframe

我之前将.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));
}

1 个答案:

答案 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