addChild前后设置active的区别

creator:3.8.0
问题描述:


如上图,load一个prefab之后,instantiate一个node,在addChild之前设置active = false,不会触发Test挂载脚本的onEnable,在addChild之后设置active=false的话,Test脚本的onEnable和onDisable会分别执行一次,这算坑吗?
我的理解,默认初始化一个节点后,它的active就应该为false,而不会因为设置的位置而影响才对,是否显示应该由开发者来控制。
TestInstantiateActive.rar (7.4 KB)

这不是符合本来的意义么。

image
只是位置换了,执行结果就不一样,这算正常的?

正常

let a  = 1;
// a = 2;
console.log(a);
a = 2;

只是换了位置,打印结果不一样,正常吗?

举例不一定恰当,只是告诉你代码的位置不一样,结果不一样是非常正常的

“默认初始化一个节点后,它的active就应该为false,而不会因为设置的位置而影响才对,是否显示应该由开发者来控制。”
哦,那你就说我这个理解合理吗?你这个例子初学程序的人也知道不正常,但我这个例子里这种设置的问题,初学者不一定能立马意识到区别。

况且你自己都说举例不一定恰当 :joy:

为什么初始化节点后,他的active一定是false呢?为什么是false就可以开发者来控制了而true不行呢?

你需要知道什么是生命周期,生命周期得先有生命。 我不举一个初学者都能看懂的例子,那我就没必要举例子,因为我觉得你就是初学者。

这个例子里,我并没有设置active=true,测下来,是在addChild内部设置了active=true,所以谈不上“为什么是false就可以开发者来控制了而true不行呢?”

什么鬼,之所以是true是因为你的prefab是true
image
你看下你的pb,当然默认确实是true

请问,官方文档里有明确的说明addChild会改变active属性吗?我目前没找到。

哦,这样啊,得罪了 :smile:

当一件事,你觉得不可以思议(addChild居然会改变active)时,也许根本不是这个原因造成的(其实是这个node本身就是active就是true)。给你以后开发一个思考问题的方式

嗯,谢谢~