Safari中的requestAnimationFrame同步问题

时间:2014-03-05 18:43:34

标签: javascript html5 safari html5-canvas requestanimationframe

当通过画布运行动画时,我注意到Mavericks中的Safari 7实际上似乎与屏幕随机不同步。我确定它不是随机的,没有计算机真的是什么,所以我希望能够获得一些有关这里真正发生的事情的见解。我认为这是一个刷新同步问题,因为它声称即使它的行为都很冷,也会以很酷的60fps运行。

调用主循环的代码:

Studio.render = function(){
    Studio.tick();
    Studio.stage.render();
    requestAnimationFrame(Studio.render);
}

Studio.tick:

Studio.tick = function() {
    this._now       = Studio.now();
    this.delta      = this._now - this.time;
    this.time       = this._now;
    this.frameRatio = this.delta/16.666666666666668; // vs 60fps
};

Studio.now:...我正在使用performance.now shim,所以对于Safari来说它等同于

Date.now

我早就想到它会成为一个内存问题,垃圾收集器正在踢,这导致了随机的口吃。尽可能多地删除,问题仍然存在。

然后我继续交换了requestAnimationFrame window.requestAnimationFrame = window.setTimeout;的定义,导致Safari使用超时,我在16的持续时间内添加到主Studio.render requestAnimationFrame(Studio.render,16);事情好像得到了好一点。对此感到困惑,我将其更改为requestAnimationFrame(Studio.render,4);,突然间它变得柔滑顺滑。显然,这不是内存问题,运行所有计算4x应该导致4倍的暂停。

我希望我错过了一些明显的东西,否则在通过Safari玩游戏时我将不得不诉诸一个感觉错误的setTimeout。

提前致谢。

0 个答案:

没有答案