Я борюсь с этим и не могу найти много ссылок. Продолжайте.
Я использую requestAnimFrame, который был написан Google:
requestAnimFrame = (function() {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
window.setTimeout(callback, 1000/60);
};
})();
У меня есть функция init, которая устанавливает мою игру. Затем он вызывает обновление, которое представляет собой игровой цикл, который вызывает рендер для рисования на холст. Если вы игнорируете requestAnimFrame - каждая отдельная часть работает нормально. Как только я помещаю вызов requestAnimFrame, хотя я либо получаю ошибку "слишком много рекурсии", либо просто сбой FF.
Мой код в update() выглядит следующим образом:
game.update = function()
{
stats.update();
fps.innerHTML = stats.getFPS();
// Render objects
game.render();
// Continue game loop
requestAnimFrame(game.update());
}
stats.update просто обновляет счетчик FPS. Таким образом, вы можете видеть, эта функция не делает много. Моя функция game.render просто рисует загрузку плиток на холст, и это отлично работает.
Любые предложения?
Спасибо!
Крис