仅在帧速率允许时才在html5画布中渲染特效

时间:2012-05-30 11:16:11

标签: javascript html5 render game-loop

我按如下方式设置游戏循环:

    window.requestAnimFrame = (function(){
        return  window.requestAnimationFrame   ||
            window.webkitRequestAnimationFrame ||
            window.mozRequestAnimationFrame    ||
            window.oRequestAnimationFrame      ||
            window.msRequestAnimationFrame     ||
            function( callback ){
                window.setTimeout(callback, 1000 / 60);
            };
    })();
    (function gameLoop() {
        var time                =   new Date().getTime();
        var dt                  =   (time - prevFTime) / 1000.0;
        prevFTime               =   time;

        state.effectsOn         =   dt > 1 / 60.0 ? true : false;
        state.effectsOn         =   false;

        //game rendering logic goes here

        window.requestAnimFrame(gameLoop);
    })();

现在我想要做的是如果effectsOn变量设置为良好的帧速率,那么我将在我的游戏中渲染一些特殊效果。如果没有,我将简单地跳过渲染那些特效。

但我明显的问题是如果dt>1/60和effectsOn设置为true。我将渲染特效,这将导致渲染时间增加,从而使dt < 1/60因此使effectOn变为false的可能性。

有没有什么好的替代方法可以实现我想做的事情?

在最糟糕的情况下,我可以在主菜单中设置一个复选框,让用户决定是否渲染特效...

1 个答案:

答案 0 :(得分:2)

最初只留下特效。

如果在第一个n帧之后平均渲染时间太长,请将其关闭,然后将其关闭。