搜索

首页  >  问答  >  正文

javascript - requestAnimationFrame如何控制帧速?

想在canvas里实现动画,动画是每帧都画在Sprite上连成一张图的,试过用setTimeout实现动画,发现会跳帧,但是requestAnimationFrame无法控制帧速,我希望1s画7帧该怎么办?

仅有的幸福仅有的幸福2749 天前717

全部回复(3)我来回复

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 13:46:28

    requestAnimationFrame就是在浏览器下一帧渲染时调用的,所以可以认为requestAnimationFrame的调用速率就是浏览器的刷新速率,一般来说是60帧

    但是requestAnimationFrame调用callback的时候会传入一个时间戳参数,可以根据这个参数来进行判断从而处理你实际需要的帧速

    比如要1秒7帧的话可以这样写

    let step = (timestamp, elapsed) => {
        if (elapsed > 1000 / 7) {
            //TO DO SOMETHING
            elapsed = 0
        }
        
        window.requestAnimationFrame(
            _timestamp => step(_timestamp, elapsed + _timestamp - timestamp)
        )
    }
    window.requestAnimationFrame(timestamp => step(timestamp, 0))

    回复
    0
  • PHP中文网

    PHP中文网2017-05-16 13:46:28

    貌似不可控,浏览器自己计算的

    回复
    0
  • 迷茫

    迷茫2017-05-16 13:46:28

    1s7帧这种刷新速率...本来就是"跳帧"的效果...

    回复
    0
  • 取消回复