Я разрабатываю игру с использованием холста HTML5, поэтому у меня есть игровой цикл, который я вызываю с помощью requestAnimationFrame. Когда я использую Chrome или IE, он работает нормально, устойчивый 60 кадров в секунду и плавный, как следует. Проблемы запускаются, когда я запускаю его в Firefox. Счетчик FPS превышает 60 кадров в секунду (он составляет около 65-70), и опыт игры не кажется гладким. Если он на самом деле работает более 60 кадров в секунду, я полагаю, что могу потерять некоторые фреймы. это код, который я использую для игрового цикла:Firefox 19: Исправлена частота кадров с использованием шаблона requestAnimationFrame и HTML5. FPS более 60
window.requestAnimFrame = (function() {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000/60);
};
})();
gameloop=function(){
//Here I do my calculations and drawings
//I do this to calculate FPS
thisLoop=new Date;
var fps=1000/(thisLoop-lastLoop);
lastLoop=thisLoop;
requestAnimFrame(gameloop());
}
У вас есть объяснение? Это может быть даже нормально, но я играю в другие игры, и они, похоже, вообще не ведут себя так, как в Firefox.
Я попытался это решение:
http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
, но конечный результат будет таким же.
Я только что отредактировал его. Где сказано: requestAnimationFrame (gameloop()); это вызов вызываемой функции: requestAnimFrame (gameloop()); – 2013-02-27 00:51:39
Да, я называю игровой цикл от себя. Это должно быть хорошо, пока все используют его. – 2013-02-27 00:59:44
'requestAnimationFrame' принимает функцию, которая будет называться _later_. вы вызываете функцию (сразу), а не передаете ее. попробуйте удалить круглые скобки. – Eevee