搜尋

首頁  >  問答  >  主體

javascript - requestAnimationFrame如何控制幀速?

想在canvas裡實現動畫,動畫是每幀都畫在Sprite上連成一張圖的,試過用setTimeout實現動畫,發現會跳幀,但是requestAnimationFrame無法控制幀速,我希望1s畫7幀怎麼辦?

仅有的幸福仅有的幸福2753 天前722

全部回覆(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
  • 取消回覆