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运行,全屏不显示。
对我来说真的很奇怪,全屏幕版本实际上是根据分析器进行无效工作。