cocos creator之生命周期回调

版权声明:转载请注明出处 https://blog.csdn.net/nk1212582/article/details/81636170

版权声明:转载请注明出处 https://blog.csdn.net/nk1212582/article/details/81636170

  • CC为组件脚本提供了生命周期的回调函数。
  • 用户只要定义特定的回调函数,CC就在在特定的时候自动调用它们,无需用户手动调用
  • 生命周期函数包括:onLoad、start、update、lateupdate、onDestroy、onEnable、onDisable

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

lateupdate回调执行的时机:

  • 要在动效更新之后才进行一些额外操作(update是在所有动画更新前执行)
  • 希望所有组件的update都执行完之后再进行其他操作

代码示例:

cc.Class({
  extends: cc.Component,

  lateUpdate: function (dt) {
    this.node.rotation = 20;
  }
});

onEnable

onEnable回调的执行时机:

  • 组件的enabled属性从false变为true时
  • 所在节点的active属性从false变为true时
  • 倘若节点第一次被创建且enabled为true时,则会在onLoad之后、start之前被调用

onDisable

onDisable回调的执行时机:

  • 组件的enabled属性从true变为false
  • 所在节点的active属性从true变为false

onDestroy

当组件或者所在节点调用了destroy()时,则会调用onDestroy回调,并在帧结束时统一回收组件

规律:从onLoad和start、update和lateupdate的关系中,可以看出要对所有对象执行某些操作时,可能需要两次遍历,因为对象之间存在依赖关系,比如某对象B的某一操作g必须在另一对象A的某一操作f之后执行,则可在第一次遍历中执行A的操作f,在第二次遍历中执行B的操作g

猜你喜欢

转载自blog.csdn.net/nk1212582/article/details/81636170