В моем приложении есть холст, размер которого (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 мс, я думаю), у меня не должно быть такого результата, поскольку между созданием таймера и его таймером в принципе ничего не происходит. проверка, кроме запроса AnimFrame
У меня также есть несколько повторяющихся микрозамерзаний (менее секунды), которые происходят каждые 2/3 секунды. Но таймер не обнаруживает изменений во времени (как, например, даже счетчик времени в javascript заблокирован)
Мои функции таймеров такие, но здесь это не имеет значения
timerInit = function()
{
return new Date();
}
timerDiff = function(datePrev)
{
return new Date().getTime() - datePrev.getTime();
}