粒子系统重置问题

粒子首次播放完后,调用stopSystem()然后放入对象池,当再次需要的时候从池中拿出调用resetSystem()播放,发现第二次的播放表现得很奇怪,就是胡乱闪一下,多个特效测试都出现同样的问题

因为stop只是停止发射粒子,而reset需要先杀死存在的粒子,再重新发射,所以会有一帧出现上次回收前的粒子。
可以在取出是将粒子系统节点的不透明度调成0,下一站再调回来,可以避免这个问题

如果闪一下的效果是上次的遗留的话,那新问题就是调用resetSystem()根本就不播放粒子效果,我这边的效果是出了胡乱闪一下,接下来啥都没有,但粒子确实存在了duration的时长,然后stopped才变成true

那就不太清楚了,正常调用了reset后会把之前还存在的粒子直接杀掉再重新发射;
之前我这边的粒子重置就是有这个问题,用不透明度隐藏一帧就好了

我目前的做法是stop粒子后延时一点时间,等当前粒子消失完后再put进对象池里。

感觉可以试试楼上的做法,不用像我说的这种方法还要去计算延长回收的时间。

同一个问题

我用的就是2.4.3,做法是等特效播完,就调用removeFromParent()方法把自己移除,然后调用stopSystem(),之后放入对象池,等到需要同样的特效时,拿出来调用resetSystem()然后调用目标点的addChild()放进去,这个resetSystem()放入对象池时调用效果也是一样的,都是同样的问题

我在每次调用后打印特效的坐标,都是(0,0),坐标应该没啥问题

特效使用custom重新编辑过的,不知道会不会影响

reset 后改透明度到0,然后下一帧改回。

我也遇到过这个问题,放到对象池里会出现会闪一下的问题,但是我的项目里面用到的不算太多,所以我放弃了对象池,勾上了粒子系统的Auto Remove On Finish,移出父物体就解决了,但是对于大量的可能还是得用对象池.

这是问题的一部分,核心问题是闪了之后特效就没了,并没有播一遍