次のコードがあります。
var gameStateRender = function (game) {
var t = new Date();
/* time passed since last frame */
game.timePassed = t.getTime() - game.timeFrameStart;
/* time when frame starts */
game.timeFrameStart = t.getTime();
/* time passed total */
game.timeTotal += game.timePassed;
game.update();
game.draw();
};
/* set the default game-state */
var gameState = gameStateRender;
60 fpsrequestAnimFrame
のフォールバック ( )を使用します。setTimeout
window.requestAnimFrame = (function () {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000 / game.fps);
};
})();
(function gameloop () {
requestAnimFrame(gameloop);
gameState(game);
})();
ゲームは FF、IE9 でスムーズに動作し、一定のフレームレートは ~60 fps です。
クロムでは、ゲームも最大 60 fps ですが、途切れます。いくつかの事実:
クロムでマウスを動かしている間、アニメーション全体が滑らかで、マウスの動きを止めるとアニメーションが途切れ始めます。ゲームは常に〜60 fpsです(マウスを動かしているときと動かしていないとき)。
を使用している間
console.log(...)
、ゲームはスムーズに実行されますが、コンソールに何かを出力することなく、ゲームが再び途切れます。(???)var gameStateRender = function (game) { var t = new Date(); /* time passed since last frame */ game.timePassed = t.getTime() - game.timeFrameStart; /* time when frame starts */ game.timeFrameStart = t.getTime(); /* time passed total */ game.timeTotal += game.timePassed; console.log(game.timeTotal); game.update(); game.draw(); };
上記のコードを実行している間、アニメーションはスムーズです。実際、ゲームのフレームレートは常に ~60 (1 フレームあたり 16 ミリ秒) であり、これは私が確認したものです。
誰かが以前にこの(奇妙な)行動をしたことがありますか?私にはかなり奇妙に聞こえます。