私のアプリケーションには、ウィンドウサイズに応じてCSSサイズ(htmlではなくCSS)が更新されるキャンバスがあります。
私はこのように見えるメインのgameplayLoopを持っています:
run = function(){
console.log(timerDiff(frameTime));
game.inputManage();
game.logics();
game.graphics.animate();
game.graphics.render();
frameTime = timerInit();
requestAnimFrame(run);
}
私のrequestAnimFrame関数はPaulIrishのものです:
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
つまり、基本的に問題は、requestAnimFrame呼び出しと有効な関数呼び出しの間の時間を測定するログに記録するタイマーが完全に変更されることです。ブラウザがフルスクリーンの場合は50/60ミリ秒になり、ウィンドウが小さい場合は10ミリ秒になります。
requestAnimFrame呼び出しは、60 fpsのリズム(30 msのようなものだと思います)で関数を常に呼び出すことになっているので、タイマーの作成とチェックの間に基本的に何も起こらないので、このような結果は得られないはずです。 requestAnimFrame
また、2/3秒ごとのように発生するマイクロフリーズ(1秒未満)が繰り返し発生します。ただし、タイマーは時間の変化を検出しません(javascriptのタイムカウンターもブロックされているように)
私のタイマー機能はこんな感じですが、ここでは関係ありません
timerInit = function()
{
return new Date();
}
timerDiff = function(datePrev)
{
return new Date().getTime() - datePrev.getTime();
}