预制体中的脚本不能控制节点的显隐?

预制体中的脚本中的方法:

initData(data) { if (!data) { return; } this.alert.active = data.alert; },

外部调用的脚本:
let alertNode = cc.instantiate(this.preAlert); alertNode.setPosition(x, y, 20 - idx); alertNode.getComponent('PrefabAlertController').initData(data); this.gameNode.addChild(alertNode);

其中的数据Data数据格式和内容都是正常可以让alert节点显示的,但是实际执行的时候并不会显示… 请问为啥? 不能在外面调用预制体中的脚本操作预制体中的节点吗???

首先这个 this.alert是不是一个node对象,active属性是否存在;其次在initData中断点看是否有进入到该方法;再次data.alert
是否是bool。多想多断点。
最后还要考虑是否生成了多个preAlert节点,导致后面生成的覆盖了前面生成的

this.alert 是个 Sprite 并且已经在编辑器里面绑定好了, 从打印的日志来看 也有 active 属性, initData方法也进入了 而且 cc.log(data) 打印出来的数据 完全符合要求, data.alert = true

确实在实际中 多次使用了 cc.instantiate(this.preAlert); 生成了多个node 这样会导致 覆盖吗? 我理解的是 创建出来的node 已经是独立的了 按理说 node上面的PrefabAlertController脚本应该只会影响自己这个节点吧? 会把其他节点都影响吗?

我试了一下 只创建一次

并没有什么变化 依然不会显示出来,应该不是 多次创建覆盖的问题

sprite没有active属性,要用this.alert.node.active。另外,打印!=断点,还是要断点进去看看数据的情况

sprite是有active属性的

这个属性控制sprite是否渲染,active为false,图片就不显示了

是只影响当前的节点,我的意思是在同一位置创建两个,后面创建的显示,前面创建的不显示,然后后面创建的挡在前面,导致人眼看不到

这个属性叫做enabled,不是active

确实使用了 alert.node.active 就可以了 感谢大神

我记错了额