cocos2dx 3.17 粒子系统的BUG反馈

在使用ParticleBatchNode进行粒子统一播放的时候,会出现粒子播放的BUG。
在粒子数量少的时候,可以很明显的看到,有些粒子的贴图,会不按照编辑时的展示那样,正常的变小,消失或者其他。
BUG1:
在CCParticleSystem.cpp 中, 900行,函数void ParticleSystem::update(float dt)中。


在对_batchNode的处理中,disableParticle接口的目的是使atlastIndex[i]中保存的对应的粒子贴图失效。在红色框中可以明显的看到,实际上时间为小于0的贴图,是atlasIndex[i],但是已经被atlasIndex[_particleCount-1]给覆盖了。
而且,在while (j > 0 && _particleData.timeToLive[j] <= 0)循环中,_particleCount-- 了,假如末位是一张timeToLive<0的贴图,在外围的for循环中,就不会对末位的贴图调用_batchNode的disableParticle接口了。

BUG2:
在CCParticleSystem.cpp 中, 1028行,函数void ParticleSystem::update(float dt)中。

会调用updateParticleQuads接口。ParticleSystemQuad继承了ParticleSystem。
另一个问题就在CCParticleSystemQuad.cpp中,函数void ParticleSystemQuad::updateParticleQuads()


startQuad是一个数组,保存贴图数据的数组。通过quadStart++ 取的图片一定是按顺序的。但是在ParticleSystem::update(float dt)中,把真正失效的图片移到数组的末位,并且交换了atlasIndex数据。那么就说明,quadStart处理的数据是错误的。

希望官方能在下个版本,把这个BUG修复了。
联系邮箱:358044619@qq.com