Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
游戏循环框架(javascript/canvas)_Javascript_Loops_Canvas - Fatal编程技术网

游戏循环框架(javascript/canvas)

游戏循环框架(javascript/canvas),javascript,loops,canvas,Javascript,Loops,Canvas,我正在努力解决这个问题,似乎找不到太多的参考资料 我使用的是谷歌编写的requestAnimFrame: requestAnimFrame = (function() { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||

我正在努力解决这个问题,似乎找不到太多的参考资料

我使用的是谷歌编写的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,这是一个调用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!谢谢。:)