onLoad()与start()之间会发生什么?

  • Creator 版本:

  • 目标平台:

  • 详细报错信息,包含调用堆栈:

  • 重现方式:

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

他们之间没有什么联系。start属于组件的 自动生命周期。而preload, onLoad, onEnable归属于nodeActivator控制,不是组件的自动生命周期。至于onLoad和start之间会发生什么,取决于它的节点被激活的代码所执行之处。

第一次发,不熟悉,问题是下面这样:
1 我在加载场景后的onload方法里,获取节点上绑定的script,都有值
2 在我退出场景后,再加载场景完毕的onload方法中,打印该值存在,
在一个public方法中调用,却提示不存在
在随后的start()方法中打印,该值存在,
在onload与start之间还会存在其他操作吗?

这个情况下。我来分析一下。进入场景, 根节点激活,然后深度优先遍历这个根节点,把所有节点的组件们的 preload 打入一个 preload队列(同一个节点的组件可以设置优先级来决定调用顺序),所有节点的的组件们的 onLoad打入一个 onLoad 队列,把所有节点的的组件们的 onEnable 打入一个 onEnable 队列。然后 顺序执行 preload 队列的所有 preload, 再顺序执行 onLoad 队列的所有 onLoad, 再顺序执行 onEnable 队列的所有onEnable。
由于cc.director的mainLoop要开始工作了,然后在 this._scheduler.update(this._deltaTime); 这一层执行场景树种所有节点的组件们的start方法(依然是深度优先遍历,同一个节点的组件可以设置优先级来决定调用顺序),这边是start执行的地方。

如果你想在 onLoad打印一个值存在,那个那个值初始化所在的onLoad,是在你 那个onLoad之前执行还是之后执行。这个你需要看看场景树

在onload中进行初始化,而且打印了也存在
在onload之后有个public方法中,打印不存在
在start中打印,又存在,很奇怪

而且第一次场景加载完,这三个地方都存在,退出当前场景,再次进入这个场景,就会出现这个问题

这个只能上传代码才能看了

解决了,是mvc中调用的问题,与生命周期无关
谢谢