CocosCreator的生命週期回撥
記錄
1、如果該Node正常初始化或初始化隱藏然後active由false置為true,則執行順序都為:onLoad -> onEnable -> start;
2、當active由true置為false,總是進入 onDisable;
3、當active由false置為true,總是進入 onEnable;
4、無論以上哪種情況,父節點的onLoad、onEnable、start等回撥總是比子節點先執行;
總結
按初始化順序從先到後:onLoad -> onEnable(若第一次建立) -> start;
按重新整理順序從先到後:update -> lateUpdate;
生命週期回撥
Cocos Creator 為元件指令碼提供了生命週期的回撥函式。使用者只要定義特定的回撥函式,Creator 就會在特定的時期自動執行相關指令碼,使用者不需要手工呼叫它們。
目前提供給使用者的生命週期回撥函式主要有:
- onLoad
- start
- update
- lateUpdate
- onDestroy
- onEnable
- onDisable
onLoad
元件指令碼的初始化階段,我們提供了 onLoad 回撥函式。onLoad 回撥會在元件首次啟用時觸發,比如所在的場景被載入,或者所在節點被啟用的情況下。在 onLoad 階段,保證了你可以獲取到場景中的其他節點,以及節點關聯的資源資料。onLoad 總是會在任何 start 方法呼叫前執行,這能用於安排指令碼的初始化順序。通常我們會在 onLoad 階段去做一些初始化相關的操作。例如:
cc.Class({
extends: cc.Component,
properties: {
bulletSprite: cc.SpriteFrame,
gun: cc.Node,
},
onLoad: function () {
this._bulletRect = this.bulletSprite.getRect();
this.gun = cc.find('hand/weapon', this.node);
},
});
start
start 回撥函式會在元件第一次啟用前,也就是第一次執行 update 之前觸發。start 通常用於初始化一些中間狀態的資料,這些資料可能在 update 時會發生改變,並且被頻繁的 enable 和 disable。
cc.Class({
extends: cc.Component,
start: function () {
this._timer = 0.0;
},
update: function (dt) {
this._timer += dt;
if ( this._timer >= 10.0 ) {
console.log('I am done!');
this.enabled = false;
}
},
});
update
遊戲開發的一個關鍵點是在每一幀渲染前更新物體的行為,狀態和方位。這些更新操作通常都放在 update 回撥中。
cc.Class({
extends: cc.Component,
update: function (dt) {
this.node.setPosition( 0.0, 40.0 * dt );
}
});
lateUpdate
update 會在所有動畫更新前執行,但如果我們要在動畫更新之後才進行一些額外操作,或者希望在所有元件的 update 都執行完之後才進行其它操作,那就需要用到 lateUpdate 回撥。
cc.Class({
extends: cc.Component,
lateUpdate: function (dt) {
this.node.rotation = 20;
}
});
onEnable
當元件的 enabled 屬性從 false 變為 true 時,或者所在節點的 active 屬性從 false 變為 true 時,會啟用 onEnable 回撥。倘若節點第一次被建立且 enabled 為 true,則會在 onLoad 之後,start 之前被呼叫。
onDisable
當元件的 enabled 屬性從 true 變為 false 時,或者所在節點的 active 屬性從 true 變為 false 時,會啟用 onDisable 回撥。
onDestroy
當元件或者所在節點呼叫了 destroy(),則會呼叫 onDestroy 回撥,並在當幀結束時統一回收元件。