游戏循环框架(javascript/canvas)
我正在努力解决这个问题,似乎找不到太多的参考资料 我使用的是谷歌编写的requestAnimFrame:游戏循环框架(javascript/canvas),javascript,loops,canvas,Javascript,Loops,Canvas,我正在努力解决这个问题,似乎找不到太多的参考资料 我使用的是谷歌编写的requestAnimFrame: requestAnimFrame = (function() { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||
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,这是一个调用render to draw to canvas的游戏循环。如果忽略框架,则每个单独的零件都可以正常工作。但一旦我调用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函数只是在画布上绘制了一堆瓷砖,效果很好
有什么建议吗
谢谢
Chris您需要传入函数,而不是调用函数的结果。换言之,改变这一点:
requestAnimFrame(game.update());
为此:
requestAnimFrame(game.update);
当前的方式将进入游戏。更新,完成它的操作,然后尝试计算表达式:
requestAnimFrame(game.update())
为了计算它,它首先需要计算requestAnimFrame
的参数:
game.update()
这只是对自身的函数调用,导致无限递归,直到出现堆栈溢出/太多递归错误。它永远无法调用
requestAnimFrame
,因为它总是在计算内部参数。Argh!有些东西很简单,但现在却完美地工作了。我想我需要更多地阅读javascript!谢谢。:)