1. 程式人生 > >CocosCreator的生命週期回撥

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 回撥,並在當幀結束時統一回收元件。