在我的应用程序中,我有一个画布,它的 CSS 大小(CSS,不是 html)会根据窗口大小进行更新。
我有一个主要的游戏循环,看起来像这样:
run = function(){
console.log(timerDiff(frameTime));
game.inputManage();
game.logics();
game.graphics.animate();
game.graphics.render();
frameTime = timerInit();
requestAnimFrame(run);
}
我的 requestAnimFrame 函数是来自 Paul Irish 的函数:
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 调用应该以 60fps 的节奏(我认为大约是 30 毫秒)不断调用函数,所以我不应该有这种结果,因为在计时器的创建和检查之间基本上没有发生任何事情,除了requestAnimFrame
我也有一些反复出现的微冻结(不到一秒),每 2/3 秒发生一次。但是计时器没有检测到时间的任何变化(就像javascript的时间计数器被阻止一样)
我的计时器功能是这样的,但在这里并不重要
timerInit = function()
{
return new Date();
}
timerDiff = function(datePrev)
{
return new Date().getTime() - datePrev.getTime();
}