脚本创建子节点并动态加载SpriteFrame资源不显示

  • Creator 版本:3.6.0

  • 目标平台:谷歌浏览器或模拟器

  • 重现方式:代码重现

  • 首个报错:无报错

  • 编辑器操作系统:mac

  • 重现概率:100%

情况描述
在学习使用Cocos的过程中,尝试利用脚本组件在当前SpriteSplash节点上动态创建Sprite子节点,并加载resources下的PNG格式图片,在浏览器和模拟器预览中均无法显示加载的图片,且没有任何报错信息,但是通过log()可以看到该节点已经生成,且该节点已经被正确的放置到SpriteSplash的子节点中。
代码截图如下:

问题排查
在resources.load({});代码块内调用log('inside the area: ', this.node.getChildByName(‘sprite_node’));可显示node相关信息。
在resources.load({});代码块外调用log('outside the area: ', this.node.getChildByName(‘sprite_node’));返回结果为null。

求助
是我漏写了代码,还是有bug?

使用编辑器预览运行看看?

  1. 外面打印为null,是因为这个是异步加载的,你打印的时候,还没创建
  2. 你需要先判断err,可以先打印err,也许你路径或者什么有问题

首先我是个菜菜菜菜菜鸟,
子节点,动态加载,预制件吗?我刚在2d模式下也遇到类似问题,不知道跟你一样不,后来查阅官方文档提到:2d下的节点都需要canvas带的r什么的才能渲染.
你看看你那个是不是没有带那个组建 我用了一晚上 还没完全搞清楚,
不过在预制件里添加上那个2d渲染组件 就能正确显示了.
先睡了 明天再确认是不是这样.

1、明白了,谢谢。
2、我加入err判断,是没有信息的。应该是没有报错。

我使用编辑器预览,在运行状态的时候,图片没有显示。


但是我点了暂停之后,图片出现了。

好奇怪啊。

不是预制件,就是动态创建子节点然后在这个子节点上加载Sprite(图片)。

节点的 layer 看一下是否为 UI_2D ?

不是的,是default。这个是需要每次都在代码中生命layer的类型嘛?

因为一般 canvas 中的 2D 摄像机默认可以显示的节点分组是 UI_2D

https://docs.cocos.com/creator/manual/zh/concepts/scene/layer.html#引擎内置的层级

懂了,谢谢大神!

layer在脚本中可以通过node.layer设置,但是不同类型都是通过数字表示的,这个对应类型的值怎么查找啊?只能去visibility那边去看么?