版权声明:转载请注明出处 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回调,并在帧结束时统一回收组件