コメントに見られるように、あなたはこれについてあまり不思議に思う必要はないでしょう。javascriptゲームプログラミングを行うことに伴う最大のことは、異なるハードウェアを備えた異なるコンピューターを使用することです。したがって、エンジンを補間しない場合、フレームレートはそれらすべてで異なります。この例は次のようになります
// Updated drawing code for our objects
Rect.prototype.draw = function(context, interpolation) {
context.fillRect(this.x, this.y + this.velocity * interpolation, 30, 30);
};
Game.draw = function(interpolation) {
this.context.clearRect(0, 0, 640, 480);
for (var i=0; i < this.entities.length; i++) {
this.entities[i].draw(this.context, interpolation);
}
};
Game.run = (function() {
var loops = 0, skipTicks = 1000 / Game.fps,
maxFrameSkip = 10,
nextGameTick = (new Date).getTime(),
lastGameTick;
return function() {
loops = 0;
while ((new Date).getTime() > nextGameTick) {
Game.update();
nextGameTick += skipTicks;
loops++;
}
if (!loops) {
Game.draw((nextGameTick - (new Date).getTime()) / skipTicks);
} else {
Game.draw(0);
}
};
})();
これにより、ゲームロジックがGame.fpsに保持されます。避けたいもう1つのことは、描画ロジックでjQueryを使用することです。これは、jQueryのアニメーションキューが非常に遅く、アニメーションが無限にスタックすることになり、フレームごとに大きな遅延が発生するためです。