Chr*_*ans 10 javascript loops canvas
我正在努力解决这个问题,似乎无法找到更多的参考资料.
我使用的是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);
};
})();
Run Code Online (Sandbox Code Playgroud)
我有一个功能"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());
}
Run Code Online (Sandbox Code Playgroud)
stats.update只是更新FPS计数器.所以你可以看到,这个功能并没有做很多.我的game.render函数只是在画布上绘制了一大堆瓷砖,工作正常.
有什么建议?
谢谢!
克里斯
ick*_*fay 22
您需要传递函数,而不是调用函数的结果.换句话说,改变这个:
requestAnimFrame(game.update());
Run Code Online (Sandbox Code Playgroud)
对此:
requestAnimFrame(game.update);
Run Code Online (Sandbox Code Playgroud)
它目前的方式将进入game.update,做它的事情,然后尝试评估表达式:
requestAnimFrame(game.update())
Run Code Online (Sandbox Code Playgroud)
为了评估它,首先需要评估参数requestAnimFrame:
game.update()
Run Code Online (Sandbox Code Playgroud)
这只是一个函数回调自身,导致无限递归,直到堆栈溢出/太多的递归错误.它永远不会被调用,requestAnimFrame因为它总是在评估内部参数.
| 归档时间: |
|
| 查看次数: |
12152 次 |
| 最近记录: |