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。

在 chrome 中,游戏也有 ~60 fps,但会卡顿。一些事实:

  • 当我在 chrome 中移动鼠标时,整个动画很流畅,当我停止移动鼠标时,动画开始结结巴巴。游戏总是有大约 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(每帧 16 毫秒)。

以前有没有人有过这种(奇怪的)行为?对我来说听起来很奇怪。

4

0 回答 0