cocos粒子系统(ParticleSystem)频繁发射粒子时,粒子互不影响,跟随生命周期自由消失

关于粒子系统频繁发射,但后一次发射粒子同时,前一次粒子的发射不受影响,粒子跟随其生命周期自由消失。
本人看了cocos关于ParticleSystem组件的API,发射粒子的方法只有一种
node.getComponent(cc.ParticleSystem).resetSystem() :杀死所有存在的粒子,然后重新启动粒子发射器。
注意,调用此方法会杀死该组件之前发射的还未消失的粒子,因此放调用该方法去频繁发射粒子时,会造成前面发射的粒子突然消失,视觉上难以接受。
解决方法:
思考良久,发现只能在每次需要发射粒子的时候,通过代码创建一个带有粒子组件的节点,并且粒子组件的参数设置中需要设置autoRemoveOnFinish = true,这样创建的粒子节点在播放完生命周期的粒子后,就自动销毁所在节点。

代码:

onLoad(){
// onLoad时加载粒子文件,使用更快速的调用
 var self = this
      cc.loader.loadRes("images/assets/particle/flower1", cc.ParticleAsset, function (err, file) 
            self.flower1 = file;
        });
        cc.loader.loadRes("images/assets/particle/flower2", cc.ParticleAsset, function (err, file) 
            self.flower2 = file;
        });
        cc.loader.loadRes("images/assets/particle/flower3", cc.ParticleAsset, function (err, file) 
            self.flower3 = file;
        }); 
},
// 在需要发射粒子时,调用this.spawn_particleSystem(numX, numY),其中numX,numY是粒子节点的坐标,根据需要设置粒子节点的位置
spawn_particleSystem(numX, numY) {
        let particle_list = [this.flower1,this.flower2,this.flower3]
        let particle = this.node.getChildByName('particle')
        let new_particle = new cc.Node() // 创建一个空节点
        particle.addChild(new_particle) 
        let particleSystem = new_particle.addComponent(cc.ParticleSystem) // 空节点上挂载粒子组件
        particleSystem.playOnLoad = false // 节点的active为true时,粒子不会自动播放
        particleSystem.autoRemoveOnFinish = true // 粒子播放完毕后自动销毁所在节点
        particleSystem.file = particle_list[Math.floor(Math.random() * particle_list.length)] // 随机使用三个粒子文件中的其中一个,使得点击出现的粒子效果不那么单一
        new_particle.setPosition(numX, numY) // 设置粒子组件所在节点的坐标
        particleSystem.resetSystem() // 重启粒子系统,播放粒子,想了一下,可以把这句代码删掉,把particleSystem.playOnLoad = true,应该也可以实现相同的效果。

如果有更好的方法,欢迎评论下方留言,共同进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值