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
总结:代码执行顺序总是从上到下
浙公网安备 33010602011771号