使用window.animationFrame
,它是传统window.requestAnimationFrame
的基于future 的表亲.
DART已经转向使用Future和Stream作为更面向对象的方式来处理异步操作.基于回调的(旧的被 destruct 的)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 ,num
包含一个类似于window.performance.now()
的"高性能计时器".从现在到页面开始,num
是一个单调递增的增量.它的分辨率为微秒.
在浏览器开始绘制页面之前,"future "就已经完成了.当这个future 完成时,更新您的世界状态并绘制所有内容.
如果希望动画或循环继续,则必须在每一帧上从animationFrame请求一个新的future .在本例中,gameLoop()
个寄存器将在下一个动画帧上收到通知.
顺便说一句,有一个名为game_loop的wine 吧套餐,你可能会发现它很有用.