如何使用Dart和Web以60fps驱动动画循环?

前端之家收集整理的这篇文章主要介绍了如何使用Dart和Web以60fps驱动动画循环?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在Dart Web应用程序中以60fps驱动动画循环或游戏循环?

解决方法

使用window.animationFrame,传统window.requestAnimationFrame的基于Future的表兄弟.

Dart一直在转向使用FutureStream作为处理异步操作的更多面向对象的方法.基于回调(new’n busted)的requestAnimationFrame被基于Future(新热度)的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结束的Future,它包含一个类似于window.performance.now()的“高性能计时器”.从现在到页面开始时,num是单调递增的增量.它具有微秒分辨率.

在浏览器绘制页面之前,Future就完成了.更新您的世界状态,并在此未来完成时绘制所有内容.

如果希望动画或循环继续,则必须在每帧上从animationFrame请求新的Future.在此示例中,gameLoop()注册以在下一个动画帧上得到通知.

BTW有一个名为game_loop的pub包,你可能觉得它很有用.

原文链接:https://www.f2er.com/html/231941.html

猜你在找的HTML相关文章