cocos教程:生命周期回调

 

一 生命周期

二 代码执行顺序

 

一 生命周期

1 cocos的cc.Component组件有如下生命周期

  • construct              新建时触发,整个生命周期只会触发一次。此时无法通过cc.find获取商店其它节点。
  • onLoad                 节点激活时触发,整个生命周期只会触发一次
  • start                      节点第一次激活时触发,在update之前,整个生命周期只会触发一次
  • update                  动画、物理、粒子等渲染前执行,每帧调用
  • lateUpdate           动画、物理、粒子等渲染后执行,每帧调用
  • onDestroy            销毁时执行,整个生命周期只会触发一次
  • onEnable             组件enabled从false变为true,或者节点active从false变为true触发
  • onDisable            组件enabled从true变为false,或者节点active从ture变为false触发

 

2 添加组件到舞台  addChild(node) 会依次调用

onLoad

onEnable

start

update

lateUpdate

 

3 组件从舞台移除  removeChild(node) 会依次调用

onDisable

 

4 node.active = false

不再执行udpate和LateUpdate

如果只是想隐藏,但是继续执行update,可以使用node.opacity = 0隐藏,node.opacity = 255显示

 

5 node.destroy 会依次调用

onDisable

onDestroy

destroy调用后不会立即销毁,在当前逻辑帧更新后统一销毁。可以通过cc.isValid判断该组件是否可用。

 

节点Life1点击后销毁自己,在调用destroy后文本组件isValid(label)=true,在onDestroy中isValid(label)=false,但是仍然可以访问并执行label.string = "123"。

Life1.ts:

export class Life1 extends Component {

    @property(Label)
    label1: Label = null;

    protected onLoad(): void {

        this.node.on(Node.EventType.TOUCH_END, () => {
            console.log("A:", isValid(this.label1)) //true
            this.node.destroy();
            console.log("B:", isValid(this.label1)) //true
        }, this)
    }

    protected onDestroy(): void {
        console.log("C:", this.label1, isValid(this.label1)); //false
        this.label1.string = "123";
    }
}

 

二 代码执行顺序

1 属性面板上代码执行顺序

一个组件上同时绑定两个组件,执行顺序从上到下

 

 

2 场景节点代码执行顺序

场景节点执行顺序从上到下

Life1 onLoad

Life2 onLoad

 

总结:代码执行顺序总是从上到下

 

posted on 2020-07-20 12:02  gamedaybyday  阅读(4274)  评论(0)    收藏  举报