如何在Dart web應用程序中以60fps的速度驅動動畫循環或遊戲循環?如何用Dart和網絡以60fps的速度驅動動畫循環?
19
A
回答
34
使用window.animationFrame
,傳統的window.requestAnimationFrame
未來的表弟。
Dart已經轉向使用Future和Stream作爲更多面向對象的方式來處理異步操作。基於未來的(新熱點)animationFrame
代替基於回調的(舊'n已完成)。
這裏有一個例子:
import 'dart:html';
gameLoop(num delta) {
// do stuff
window.animationFrame.then(gameLoop);
}
void main() {
window.animationFrame.then(gameLoop);
}
的animationFrame
簽名是這樣的:
Future<num> animationFrame();
注意如何animationFrame
返回一個未來的一個num
完成,其中包含了「高性能定時器「類似於window.performance.now()
。 num
是從現在開始到頁面開始的單調遞增的增量。它具有微秒的分辨率。
在瀏覽器關於繪製頁面之前,Future就完成了。更新你的世界的狀態,並繪製這個未來完成時的一切。
如果您希望動畫或循環繼續,您必須在每幀上從animationFrame請求新的Future。在這個例子中,gameLoop()
寄存器在下一個動畫幀上被通知。
順便說一句,有一個酒吧包名爲game_loop,你可能會覺得有用。
相關問題
- 1. UIView.animateWithDuration迅速循環動畫
- 2. 同時具有「速度」和無限「循環」的QML動畫
- 3. os.walk/scandir網絡驅動器上的速度太慢
- 4. jQuery的循環和動畫
- 5. GetFiles在網絡驅動器上速度太慢
- 6. 如何循環。動畫JQuery
- 7. 如何循環css3動畫?
- 8. Flash,Internet Explorer和60fps的速度
- 9. 動畫畫布使用循環和setInterval
- 10. iphone動畫:如何移動UIView動畫加速和減速的動畫?
- 11. 循環動畫
- 12. 循環動畫
- 13. 循環動畫
- 14. 動畫循環和縮放
- 15. 如何使此動畫自動循環?
- 16. 的UIImageView動畫以不同的速度
- 17. Flash動畫動態速度
- 18. SlidingDrawer動畫速度
- 19. 如何通過網絡硒驅動
- 20. 網絡驅動器:與網格互動
- 21. 使用速度循環/重新啓動動畫而不反向播放
- 22. 循環ggplots創建動畫:增長速度
- 23. 如何使用for循環動畫UIView?
- 24. 如何控制動畫GIF的速度?
- 25. 畫布動畫速度
- 26. jQuery動畫 - 以不同的速度動畫不同的div
- 27. 開始動畫和使用動畫塊的動畫速度不同
- 28. 如何刪除Chrome網絡驅動程序和IE網絡驅動程序的日誌
- 29. 如何修改我的開發環境以創建網絡驅動器別名?
- 30. Hudson bAt腳本和網絡驅動器
那game_loop鏈接給了404 – Tgwizman
這是正確的位置http://pub.dartlang.org/packages/game_loop – Tgwizman
requestAnimationFrame old'n busted?看看基於Future的animationFrame會創建一個完成者,它是通過使用原始(舊的)已被調用的requestAnimationFrame回調觸發的? – paulecoyote