预制体实例化的时候都会在某一个坐标闪现一下为什么?

做了NPC和NPC血条,为了血条不随NPC旋转,所以分开做的预制体,先在场景挂载代码实例生成NPC,再在NPC挂载的代码里生成血条,奇怪的是血条的位置是设在NPC头上,但是每次出来一个NPC,在离NPC很远的一个点上都会闪现一下血条,就是一闪就没,然后NPC头上血条显示正常,有出来10个NPC,就闪现10次。这个是怎么回事,哪位大佬遇到过?血条是用进度条组件做的。

我把实例化血条的代码我贴出来
this.blood = null;
this.canvas = cc.find(“Canvas”);
this.blood = cc.instantiate(this.blood_pre);
this.canvas.addChild(this.blood);
this.blood.setPosition(this.node.x, this.node.y + 100);
this.blood.zIndex = 3;

你试一下把setPosition放到addchild前面

试过,一样,还试过把血条的实例化代码放到场景的代码里生成,就是生成NPC的代码下面,结果也是一样。

难道不是应该先做个角色底座节点,再在下面分别放角色精灵节点和血条节点么?为什么要做两个预制体呢

应为我角色是需要旋转的,血条不能旋转,如果做到同一个父节点上,血条就会跟着角色一起旋转

你单独旋转角色精灵就可以了,不去旋转底座,血条也不会受影响啊

你应该贴出来一个完整的例子

预制体默认透明度为0,实例化设置位置后再设置下透明度255,闪应该是预制体初始坐标问题。

this.blood = cc.instantiate(this.blood_pre);
this.canvas.addChild(this.blood);
this.blood.setPosition(this.node.x, this.node.y + 100);

代码是同步,应该是其他原因,以前label我遇到过这种问题

设置完坐标再激活 或者先设置一个屏幕外的位置 再更新当前位置

谢谢,这个方法可行,先设透明度为0,后面再改回来在效果上是可以去掉了闪现问题,但是如果直接在原来代码的this.blood.setPosition(this.node.x, this.node.y + 100);后面放入this.blood.opacity=255;不行,还是闪现,必须把this.blood.opacity=255;放到update(dt)里才行。不知道为什么。实例化的代码是放在onload()里的.连设置透明度放到start()里都不行。

也就是说给预制体设定位置之后,在update执行之前,该对象又跑到另外某点溜达了一下,然后在执行update第一帧的时候回到了正确位置。