正如在評論中看到的,你不會真的需要對這個問題有太多的想法。執行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的遊戲邏輯。你可能想要避免的另一件事是在繪圖邏輯中使用jQuery。這是因爲jQuery的動畫隊列非常緩慢,並且最終將動畫堆棧放到無限的位置,給每個幀帶來更大的延遲。
只要您保護全球範圍內的變量,這並不重要。我不會爲此擔心,這是微不足道的微觀優化。 – elclanrs
1)http://jsperf.com 2)爲正確性優化,然後爲速度 –
如果有差異,你可能不會注意到它。 –