javascript - requestAnimationFrame如何控制幀速?
問題描述
想在canvas里實(shí)現(xiàn)動(dòng)畫,動(dòng)畫是每幀都畫在Sprite上連成一張圖的,試過用setTimeout實(shí)現(xiàn)動(dòng)畫,發(fā)現(xiàn)會(huì)跳幀,但是requestAnimationFrame無法控制幀速,我希望1s畫7幀該怎么辦?
問題解答
回答1:requestAnimationFrame就是在瀏覽器下一幀渲染時(shí)調(diào)用的,所以可以認(rèn)為requestAnimationFrame的調(diào)用速率就是瀏覽器的刷新速率,一般來說是60幀
但是requestAnimationFrame調(diào)用callback的時(shí)候會(huì)傳入一個(gè)時(shí)間戳參數(shù),可以根據(jù)這個(gè)參數(shù)來進(jìn)行判斷從而處理你實(shí)際需要的幀速
比如要1秒7幀的話可以這樣寫
let step = (timestamp, elapsed) => { if (elapsed > 1000 / 7) {//TO DO SOMETHINGelapsed = 0 }window.requestAnimationFrame(_timestamp => step(_timestamp, elapsed + _timestamp - timestamp) )}window.requestAnimationFrame(timestamp => step(timestamp, 0))回答2:
貌似不可控,瀏覽器自己計(jì)算的
回答3:1s7幀這種刷新速率...本來就是'跳幀'的效果...
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題2. win10系統(tǒng) php安裝swoole擴(kuò)展3. extra沒有加載出來4. 關(guān)于Mysql數(shù)據(jù)表行轉(zhuǎn)列5. mysql - 為什么where條件中or加索引不起作用?6. php - 第三方支付平臺(tái)在很短時(shí)間內(nèi)多次異步通知,訂單多次確認(rèn)收款7. django進(jìn)行數(shù)據(jù)庫的查詢8. PHP求助,求幫忙謝謝各位9. Span標(biāo)簽10. 求救一下,用新版的phpstudy,數(shù)據(jù)庫過段時(shí)間會(huì)消失是什么情況?
