我正在努力解决这个问题似乎没有多少参考。
我使用的是Google编写的requestAnimFrame:
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”来设置我的游戏。然后调用update,这是调用渲染绘制到画布的游戏循环。如果忽略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函数只是在画布上绘制了一堆瓷砖,效果很好。
有什么建议吗?
谢谢!
克里斯
答案 0 :(得分:22)
您需要传递函数,而不是调用函数的结果。换句话说,改变这个:
requestAnimFrame(game.update());
对此:
requestAnimFrame(game.update);
目前的方式将进入game.update
,做其事,然后尝试评估表达式:
requestAnimFrame(game.update())
为了评估它,首先需要评估requestAnimFrame
的参数:
game.update()
这只是一个函数回调自身,导致无限递归,直到堆栈溢出/过多的递归错误。它永远不会调用requestAnimFrame
,因为它总是在评估内部参数。