egret新建一个游戏,主类的构造函数里面侦听了ADDED_TO_STAGE事件,然后就有了如下函数
private onAddToStage(event: egret.Event) {
egret.lifecycle.addLifecycleListener((context) => {
//addLifecycleListener接受一个参数,这个参数的类型为“只有一个参数(这里名叫context)的函数”即所谓的LifecyclePlugin,而这个函数的具体内容是由我们自己定义的,像下面这样:
context.onUpdate = () => {
//这个可以在EgretWeb中的startTicker函数中找到,是一秒执行六十次。
}
//context这个形参代表LifecycleContext类的一个实例,这个类有两个必有的方法pause()跟resume(),另外还有一个可选的方法onUpdate(),上面就是对这个可选的方法进行定义。
})
//注意上面仅仅是向addLifecycleListener传递了一个由我们自定义细节的参数(其类型是个函数)而已。
//那么,在onAddToStage的一开始,addLifecycleListener会生成一个LifecycleContext类的实例context,然后把它push进一个contexts数组,并将这个context交给上面这个我们自定义细节的参数函数去调用。
//context在游戏需要暂停时(例如切入后台了,比如在egretWing上F5调试时,点击切换到别的窗口,让游戏后台进行)会执行pause方法。pause方法自动判断目前游戏是否活动,活动则暂停,并由stage发送程序暂停的事件。如果像下面这样还自定义了onPause方法,则接着执行这个方法。resume同此理。
egret.lifecycle.onPause = () => {
egret.ticker.pause();
}
egret.lifecycle.onResume = () => {
egret.ticker.resume();
}
this.runGame().catch(e => {
console.log(e);
})
}
总的来说,关于这个生命周期,比较有用的地方就是onUpdate、onPause、onResume这几个能自定义的地方,比如写个暂停菜单什么的,其他的都可以不用管