2013-04-01 22 views

Odpowiedz

34

Użyj window.animationFrame, kuzyna przyszłościowego tradycyjnego window.requestAnimationFrame.

Dart został zmieniony, aby używać Future i Stream jako bardziej obiektowych sposobów obsługi operacji asynchronicznych. Oparte na oddzwanianiu (stare 'n busted) requestAnimationFrame zostaje zastąpione oparta na Przyszłości (new hotness) animationFrame.

Oto przykład:

import 'dart:html'; 

gameLoop(num delta) { 
    // do stuff 
    window.animationFrame.then(gameLoop); 
} 

void main() { 
    window.animationFrame.then(gameLoop); 
} 

Podpis animationFrame wygląda następująco:

Future<num> animationFrame(); 

Wskazówki jak animationFrame zwraca przyszłości, która uzupełnia z num, który posiada „wysoką wydajność timer "podobny do window.performance.now(). num to monotonicznie rosnąca delta między teraz i kiedy strona się zaczęła. Ma rozdzielczość mikrosekundy.

Przyszłość kończy się tuż przed przeglądarką dotyczącą losowania strony. Zaktualizuj stan swojego świata i narysuj wszystko, gdy ta Przyszłość się zakończy.

Musisz zażądać nowej Przyszłości z animationFrame na każdej klatce, jeśli chcesz kontynuować animację lub pętlę. W tym przykładzie rejestracja gameLoop() jest powiadamiana o następnej klatce animacji.

BTW istnieje pakiet publikacji o nazwie game_loop, który może okazać się przydatny.

+0

Link do tego linku daje 404 – Tgwizman

+0

Tutaj znajduje się poprawna lokalizacja http://pub.dartlang.org/packages/game_loop – Tgwizman

+1

W jaki sposób requestAnimationFrame stary 'n odpadł? Patrząc na źródło w oparciu o Future based animationFrame powstaje osoba, która jest uruchamiana przy użyciu oryginalnego (starego 'n busted) requestAnimationFrame callback? – paulecoyote