有demo。2.1.3版本,粒子free位置类型从对象池拿出来的时候会在上次 回收的位置 出现。

出现的时间很短,1帧吧。位置类型改成Relative就不会出现了。
已经在放回对象池和取出来的时候使用了
this.Particle = this.node.getComponent(cc.ParticleSystem);
this.Particle.resetSystem();

且2.0.9不会出现这个问题。有大佬知道怎么回事吗
(而且2.0.9版本升级到2.1.3后 项目里所有的粒子类型都从free变为Relative了)

我很慌,暂时先改为Relative类型了。:sweat:

没有人遇到粒子的问题吗。从对象池拿出来的第一帧会出现在 上次放回对象池 的位置。闪一下很难受。

有demo么?

NewProject_6.rar (620.3 KB)

这是demo
使用2.1.3打开,点击button,带粒子的箭会从左面射出,射到右面回收后,再次点击button,从对象池取出上次回收的箭,粒子就会在上次回收的地方闪现1帧。 使用this.Particle.resetSystem();没有效果。 2.0.9不会出现这个问题。

点击button射出箭

箭到达右面放回对象池

点击button再次从对象池拿出上次的箭,粒子就会在上次出现的地方闪现。 使用this.Particle.resetSystem();没有效果

临时方案:等到了距离以后,让node的opacity为0,这样就不渲染了,同时调用stopSystem停止发射,再使用settimeout或者是定时器,等一个粒子的lifetime时间后,将particlesystem放回pool里面去

我这边自己弄的particle + pool的demo没有问题,但是你这边这个demo当中就会有残留的现象。
要是着急可以先用临时方案。

creator版本用的2.2.1-rc9

我这边再研究一下看看

等2.2.1稳定了我升级版本吧,2.1.3确实有这个问题。或者把粒子类型都从free变为Relative

半年过去了,我试了一下2.3.3版本还存在这个问题。希望解决一下

这个问题引擎组就没打算更改吗?

先stop然后再play呢

我也遇到一模一样的问题 ,场景也是一模一样的 。 2.4.2 版本。 请官方给一个完整的的例子出来用学习一下。

看一下particleSystem里面的代码,回收的时候要把_simulator._uvFilled设为0,估计还有其他设置

stopSystem resetSystem 也用。 有这个问题。 你们有没有完全可用的 例子参考? 2.4.2

又是1年过去了,大佬们可不可以先修复这个问题啊0.0

1赞

这问题我提过PR
https://github.com/cocos-creator/engine/pull/7060

至少要升级到2.4.3。
不升级的话需要自己合下PR