2013-04-01 23 views

回答

34

使用window.animationFrame,傳統的window.requestAnimationFrame未來的表弟。

Dart已經轉向使用FutureStream作爲更多面向對象的方式來處理異步操作。基於未來的(新熱點)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,你可能會覺得有用。

+0

那game_loop鏈接給了404 – Tgwizman

+0

這是正確的位置http://pub.dartlang.org/packages/game_loop – Tgwizman

+1

requestAnimationFrame old'n busted?看看基於Future的animationFrame會創建一個完成者,它是通過使用原始(舊的)已被調用的requestAnimationFrame回調觸發的? – paulecoyote