Подтвердить что ты не робот

Как мне управлять циклом анимации со скоростью 60 кадров в секунду с помощью Dart и Интернета?

Как подключить цикл анимации или игровой цикл со скоростью 60 кадров в секунду в веб-приложении Dart?

4b9b3361

Ответ 1

Используйте window.animationFrame, двоюродный брат традиционного window.requestAnimationFrame, основанный на будущем.

Dart переключается на использование Future и Stream как более объектно-ориентированные способы для обработки асинхронных операций. Основанный на обратном вызове (старый "n busted" ) requestAnimationFrame заменяется будущей (новая горячность) animationFrame.

Вот пример:

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 является монотонно увеличивающейся дельтой между теперь и началом страницы. Он имеет разрешение в микросекундах.

Будущее завершается прямо перед тем, как браузер будет рисовать страницу. Обновите состояние своего мира и нарисуйте все, когда это будущее завершается.

Вы должны запросить новое будущее из анимации в каждом кадре, если хотите, чтобы анимация или цикл продолжались. В этом примере регистры gameLoop() должны быть уведомлены о следующем анимационном кадре.

Кстати, есть паб-пакет с именем game_loop, который вам может пригодиться.