我想在"空节点"下动态创建子节点

    var node = new cc.Node();
    node.color = new cc.Color(255,255,255,255);
    node.setContentSize(100,100);
    node.parent = this.node;

子节点为什么在层级管理器和预览里看不到呢?

我把变量名改了_node,然后加了下面这句也不行:
this.node.addChild(_node);

哎,创建出来了。但是动态创建的节点在层级管理器看不见,可以console出来。。。

Node 本生不可见,不应该Sprite才可见吗?

…动态创建的节点如果在层级管理器看得见才不正常

你需要让他在编辑器里执行这段代码,比如放到 properties 定义的属性 setter 里调用。

你的代码本身是没有问题,只要在脚本运行时执行了这段代码,你创建的节点是已经被实例化了的,但是你的问题在于以下两点:
1、第一个问题,所谓动态创建,是指在脚本中通过代码在程序执行时创建,所以,当然在编辑器中的层级管理器中和场景编辑器中是看不见的,因为还没有创建出来,只有程序运行后才会创建。
2、’第二个问题是,node组件是所有可渲染组件都必带的一个属性,所有需要渲染在屏幕上可见的组件都必须具有具有node属性,用面对对象的思想来解释的话,就是可渲染组件都必须继承自cc.Node类,但是,node节点本身是不会被渲染的,也就是不可见,只有继承自它的组件,例如cc.sprite,cc.Label这些组件类,才可见,也就是说,光创建node不行,还得给它加上渲染组件才会渲染可见。那么问题就显而易见了,你所创建的节点,本身不带任何其他渲染组件,所以你看不到。

最后你可以试试,在你创建的节点上用addComonent()添加渲染组件,但是需要注意的是,如果添加cc.Sprite组件,需要设置图片才能看到。具体方法可以查看官方文档

1赞

cocos有一个插件可以在游戏运行的时候看到节点树,有兴趣可以下来玩一玩,免费的。

给new出来的这个node添加一个属性,node.getComponent(cc.Sprite);再去赋值一个图片先试试。

编辑器运行模式下,动态创建的节点是可以在层级管理器上查看的。

加上注解 @executeInEditMode 即可在编辑器模式下运行