一直以为start方法是先于onEnable的,今天测试发现生命周期的执行顺序是onLoad->onEnable->start。
不能理解start方法的作用,请问什么情况下会用到start方法呢?
官方文档是这么说的:start 回调函数会在组件第一次激活前,也就是第一次执行 update 之前触发。start 通常用于初始化一些需要经常修改的数据,这些数据可能在 update 时会发生改变。
感觉光从官方文档这句解释来看的话,start有点鸡肋,完全可以用onLoad来取代。
请问各位有什么场景是必须要用到start方法的吗?
比如你需要在一个组件脚本里获取其他组件的脚本,赋值给这个脚本的成员变量,这时候你就只能在start里写了
https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html?h=生命周期
看看文档 应该能解决你大部分疑问。
start的作用:当start被调用时,可以保证所有脚本的onLoad都已调用!
A onLoad()
B onLoad()
B要在A onLoad初始化之后去使用A的东西,但是无法保证A到底有没有执行过onLoad过。
所以你在B start()里去使用A的东西,就能保证A执行过初始化onLoad
可以直接理解成,你在需要start里操作时,能确保所有节点的onLoad都已经调用了
如果把逻辑都放 onLoad
里,结果就是一帧内需要处理的逻辑太多,帧时间变长导致游戏加载时卡顿。
使用 start
可以将逻辑分担到另一帧,缓解压力。
我个人一般使用 onLoad
来初始化,使用 start
来重置数据/状态。
如下:
onLoad() {
this.sprite = this.node.getComponent(cc.Sprite);
}
start() {
this.count = 0;
this.status = GameStatus.Init;
this.sprite.spriteFrame = this.defaultImage;
}
onload 自身初始化 start 跨类调用数据
感谢各位!学习到了!
请问onLoad和start不是同一帧吗?
我的理解是这两个方法都是在update之前被调用的,应该都是第一帧吧?
并不是,真要说的话,onLoad表示节点被加载的时候调用,start应该是在节点被激活后被渲染的第一帧执行
onLoad和start都是在第一帧渲染前执行,都会影响到第一帧的渲染速度,这么理解对吗?
很直白的理解的话就可以理解为,onload执行一定是在start之前
这里建议看一看我上一篇源码解读文章:《Cocos Creator 源码解读:引擎启动与主循环》
里面有说到 start
的时机,也提到了 onLoad
。
截图部分有个笔误,onEnable 是会在组件每次激活的时候触发的…粗心了
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。