今天做项目时,在onload内写东西,我在a.js的onload里定义了变量var1,b.js的onload里调用了a的一个方法func1,而func1中又使用到了var1,于是运行的时候提示var1没有定义,我不是在onload里定义了吗?在上面打算断点,结果没有走进来,直接就去func1里用var1,我怀疑可能是它们的onload有个先后执行的顺序,于是在层级管理中把他们换了一个位置,果然就好了。
之所以这么怀疑,是因为官方文档中有写到过:
节点在列表中的排序决定了节点在场景中的显示次序。在层级管理器中显示在下方的节点的渲染顺序是在上方节点的后面,即下方的节点是在上方节点之后绘制的,因而最下方的节点在 场景编辑器 中显示在了最前。
那么脚本的执行顺序应该和其所挂载的节点相关,为此,我还特地做了一个实验。
层级管理器
当我把层级这样排布时,每一个tree节点上都挂了同一个脚本TestScript,写了一句话:
onLoad () {
//测试谁先load
cc.log("onload : " + this.node.name);
},
运行查看日志得到的结果:
结果
非常完美,onload的执行顺序就是从上往下的,那么,如果我挂在同一个节点上的话,这时候的执行顺序会是怎么样呢?于是我又做了一个实验,又写了一个Test2Script脚本,还是一句话:
onLoad () {
//测试谁先load
cc.log("onload2 : " + this.node.name);
},
我把两个脚本都挂在tree上,不过把Test2Script放在了下面:
脚本顺序1
这时候的执行顺序是:
脚本顺序
结果证明谁在上面 谁就先运行~
网友评论