我设置游戏循环如下:

    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从而使effectsOn变为false。
有什么好的替代方法来实现我的目标吗?
在最坏的情况下,我可以在主菜单中设置一个复选框,让用户决定是否渲染特殊效果。。。

最佳答案

刚开始的时候把特效留下。
如果在第一帧n之后,平均渲染时间太长,请将其关闭,然后将其关闭。

关于javascript - 仅当帧频允许时才在html5 canvas中呈现特殊效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10815193/

10-09 13:34