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-animationing

しかし、最終結果は同じです。

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 に答える