0

我正在使用 HTML5 画布开发游戏,所以我有使用 requestAnimationFrame 调用的游戏循环。当我使用 Chrome 或 IE 时,它运行良好,稳定 60 fps 并且流畅。当我在 Firefox 上运行它时,问题就开始了。FPS 计数器超过 60 fps(设置在 65-70 左右),并且游戏体验一点也不流畅。如果它实际上运行超过 60 fps,我想我可能会丢失一些帧。这是我用于游戏循环的代码:

window.requestAnimFrame = (function() {
    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
    function(callback) {
        window.setTimeout(callback, 1000 / 60); 
    };
})();

    gameloop=function(){
       //Here I do my calculations and drawings

       //I do this to calculate FPS
       thisLoop=new Date;
       var fps=1000/(thisLoop-lastLoop);
       lastLoop=thisLoop;

       requestAnimFrame(gameloop());
    }

你对此有什么解释吗?这甚至可能是正常的,但我玩其他游戏,他们在 Firefox 上似乎根本没有这样的行为。

我试过这个解决方案:

http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating

但最终结果是一样的。

4

2 回答 2

0
requestAnimationFrame(gameloop());

那正确吗?这意味着您正在从自身调用游戏循环并等待它完成(这永远不会发生),然后再将其返回值 ( null) 传递给requestAnimationFrame. 您的游戏将尽可能快地运行,并且永远不会屈服于 UI。

于 2013-02-27T00:23:46.673 回答
0

requestAnimFrame(gameloop());

这是您的错误,这不是回调,您只是直接调用该方法。

requestAnimFrame(gameloop);

这会将要调用的实际游戏循环函数发送给 rAF。

于 2014-11-27T21:59:43.070 回答