1

次のコードがあります。

    var gameStateRender = function (game) {

    var t = new Date();
    /* time passed since last frame */
    game.timePassed = t.getTime() - game.timeFrameStart;
    /* time when frame starts */
    game.timeFrameStart = t.getTime();
    /* time passed total */
    game.timeTotal += game.timePassed;
    game.update();
    game.draw();
    };

    /* set the default game-state */
    var gameState = gameStateRender;

60 fpsrequestAnimFrameのフォールバック ( )を使用します。setTimeout

    window.requestAnimFrame = (function () {

    return  window.requestAnimationFrame    || 
    window.webkitRequestAnimationFrame  || 
    window.mozRequestAnimationFrame     || 
    window.oRequestAnimationFrame       || 
    window.msRequestAnimationFrame      || 
    function(callback) {

    window.setTimeout(callback, 1000 / game.fps);
    };
    })();

    (function gameloop () {

    requestAnimFrame(gameloop);
    gameState(game);

    })();

ゲームは FF、IE9 でスムーズに動作し、一定のフレームレートは ~60 fps です。

クロムでは、ゲームも最大 60 fps ですが、途切れます。いくつかの事実:

  • クロムでマウスを動かしている間、アニメーション全体が滑らかで、マウスの動きを止めるとアニメーションが途切れ始めます。ゲームは常に〜60 fpsです(マウスを動かしているときと動かしていないとき)。

  • を使用している間console.log(...)、ゲームはスムーズに実行されますが、コンソールに何かを出力することなく、ゲームが再び途切れます。(???)

    var gameStateRender = function (game) {
    
    var t = new Date();
    /* time passed since last frame */
    game.timePassed = t.getTime() - game.timeFrameStart;
    /* time when frame starts */
    game.timeFrameStart = t.getTime();
    /* time passed total */
    game.timeTotal += game.timePassed;
    
    console.log(game.timeTotal);
    
    game.update();
    game.draw();
    };
    

上記のコードを実行している間、アニメーションはスムーズです。実際、ゲームのフレームレートは常に ~60 (1 フレームあたり 16 ミリ秒) であり、これは私が確認したものです。

誰かが以前にこの(奇妙な)行動をしたことがありますか?私にはかなり奇妙に聞こえます。

4

0 に答える 0