RequestAnimationFrame以30FPS点火,目标是60FPS

时间:2018-04-06 20:24:24

标签: javascript html5-canvas requestanimationframe

Chrome / Firefox决定在30FPS时触发requestAnimationFrame。分析器显示大部分时间都是闲置的,因此它的cpu周期不会被烧毁。

我尝试写一个delta时间来“赶上”/保持同步。根据我的FPS仪表,FPS是正确的,但结果是非常不稳定的动画。我也在每次更新后立即尝试绘图,仍然不稳定。

我正在运行一个非常普通的rAF范例并注意窗口大小会影响FPS,但是分析器似乎无法解释为什么FPS会全屏下降

        let start = null;
        let step = (timestamp)=>{
            if(thisTimerID !== scope._timerID){
                return;
            }
            start = start || timestamp + delay;
            let current = timestamp;
            let delta = current - start;

            if(delta >= delay) {
                this.Update();
                this.Draw();
                start = timestamp;
            }
            requestAnimationFrame(step);
        };
        thisTimerID = this._timerID = requestAnimationFrame(step);

我应该尝试requestAnimationFrame吗?如果我在初始化时检测到低FPS,请回退到setInterval?我应该只使用requestAnimationFrame吗?也许我的delta时序逻辑存在缺陷?我知道这是一个巨大的缺陷,因为如果你切换标签然后回来,它会试图赶上并可能认为它错过了数千帧!

谢谢

编辑: requestAnimationFrame在最小负载下以60fps触发。 Draw方法导致帧速率下降。但为什么?我有2个配置文件显示较小的分辨率以60fps运行,全屏不显示。

60FPS 350x321分辨率: 60fps 350x321

38FPS 1680x921分辨率: 38fps 1680x921

对我来说真的很奇怪,全屏幕版本实际上是根据分析器进行无效工作。

0 个答案:

没有答案