7

我想知道是否应该将游戏切换到 requestAnimationFrame。如果还有理由再这样做,正如我所读到的,当您在主要浏览器中切换选项卡时,setTimeout() 现在也会暂停。

无论如何,假设我想控制动画的 FPS。

目前我可以这样做:

k.state.loopinterval = 
window.setInterval(renderLoop(), 1000 / k.settings.engine.fps );

k.settings.engine.fps想要的fps在哪里。

如果我这样做requestAnimationFrame,我就失去了这种可能性,它只会给我它所能给的一切:

window.requestAnimFrame(k.operations.startLoop);
renderLoop();

我看到有人建议将 requestAnimFrame 放在另一个循环中:

setInterval( function () {
    requestAnimationFrame( draw );
}, 1000 / 60 );

所以......我应该怎么做?保持原状?

requestAnimationFrame 的确切好处是什么,现在 setTimeout 在切换选项卡时也会暂停?

4

1 回答 1

5

requestAnimationFrame 是制作动画的正确方法。

为什么?

因为浏览器可以优化渲染以制作更流畅的动画。回答这个问题,另一种方法是:

window.requestAnimFrame = (function(){
    return  window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function(callback, element){
            window.setTimeout(callback, 1000 / 60);
          };
})();

在下面的链接中还有另一种方式。

当您调用 requestAnimation 时,您可以让浏览器了解何时重绘 html。如果您在 CSS 中制作动画/过渡并移动内容或更改背景(作为精灵),则在调用 requestAnimation 时使用 requestAnimation 将使渲染正常工作。没有它,浏览器将在什么时候渲染任何东西,什么可以进行更多的重绘然后需要。

甚至,浏览器正在运行的方式,它会做比我们还不知道的更多的优化。让浏览器了解我们在做什么,然后它们会帮助我们。

我找到了这个链接,可以添加更多想法

于 2011-11-19T19:48:37.147 回答