在我的應用程序中,我根據窗口大小更新了CSS大小(CSS,不是html)的畫布。RequestAnimationFrame調用時間根據我的畫布大小而變化
我有一個主gameplayLoop它看起來像這樣:
run = function(){
console.log(timerDiff(frameTime));
game.inputManage();
game.logics();
game.graphics.animate();
game.graphics.render();
frameTime = timerInit();
requestAnimFrame(run);
}
我requestAnimFrame功能是一個由保羅·愛爾蘭:
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 rythm下的函數(我想這大概是30ms),我不應該有這種結果,因爲定時器的創建和它的檢查,除了requestAnimFrame
我也有一些反覆發生的微凍(少於一秒),每2/3秒發生一次。但計時器沒有檢測時間的任何變化(如甚至和JavaScript的時間計數器被阻塞)
我的定時器功能是這樣的,但它並不真正的問題在這裏
timerInit = function()
{
return new Date();
}
timerDiff = function(datePrev)
{
return new Date().getTime() - datePrev.getTime();
}
您的整個方法都有缺陷,'requestAnimationFrame'沒有預煮好的幀率,只要調用它就會「請求」下一個「動畫幀」。 – circusbred 2012-03-25 13:31:51
默認情況下,requestAnimationFrame在Chrome中被鎖定爲垂直同步。我認爲這也是Firefox的情況。所以在大多數情況下,'requestAnimationFrame'的結果是60fps(當然,假設你的代碼可以跟上)。 – 2012-03-25 13:35:44
好問題。我的遊戲每隔3秒也會「凍結」,我也在使用'requestAnimationFrame'。我天真地認爲這是垃圾收集器,即使我基本上沒有分配任何對象。 – 2012-03-25 13:37:17