我想知道我是否应该将游戏切换到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也暂停了?
答案 0 :(得分: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时渲染工作正常。没有它,浏览器将呈现任何时间的任何内容,然后可以进行更多重绘。
即便如此,浏览器的运行方式也会比我们还不知道的更多优化。让浏览器了解我们正在做什么,然后他们帮助我们。
我找到this link,可以添加更多想法