粒子系统简介

粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象、物理现象及空间扭曲上具备得天独厚的优势,能为我们实现一些真实自然而又带有随机性的效果(如爆炸、烟花、水流)提供了方便。

粒子系统的组件(ParticlreSystem)

该组件是用来读取 粒子资源 数据,并且对其进行一系列例如播放、暂停、销毁等操作。
初学粒子系统

ParticleSystem属性

属性 功能说明
Preview 在编辑器模式下预览粒子,启用后选中粒子时,粒子将自动播放
Play On Load 如果设置为 true 运行时会自动发射粒子
Auto Remove On Finish 粒子播放完毕后自动销毁所在的节点
File Plist 格式的粒子配置文件
Custom 是否自定义粒子属性。开启该属性后可自定义以下部分粒子属性
Sprite Frame 自定义的粒子贴图
Duration 发射器生存时间,单位秒,-1 表示持续发射
Emission Rate 每秒发射的粒子数目
Life 粒子的运行时间及变化范围
Total Particle 粒子最大数量
Start Color 粒子初始颜色
Start Color Var 粒子初始颜色变化范围
End Color 粒子结束颜色
End Color Var 粒子结束颜色变化范围
Angle 粒子角度及变化范围
Start Size 粒子的初始大小及变化范围
End Size 粒子结束时的大小及变化范围
Start Spin 粒子开始自旋角度及变化范围
End Spin 粒子结束自旋角度及变化范围
Source Pos 发射器位置
Pos Var 发射器位置的变化范围。(横向和纵向)
Position Type 粒子位置类型,包括 FREE、RELATIVE、GROUPED 三种。详情可参考 PositionType API
Emitter Mode 发射器类型,包括 GRAVITY、RADIUS 两种。详情可参考 EmitterMode API
Gravity 重力。仅在 Emitter Mode 设为 GRAVITY 时生效
Speed 速度及变化范围。仅在 Emitter Mode 设为 GRAVITY 时生效
Tangential Accel 每个粒子的切向加速度及变化范围,即垂直于重力方向的加速度。仅在 Emitter Mode 设为 GRAVITY 时生效
Radial Accel 粒子径向加速度及变化范围,即平行于重力方向的加速度。仅在 Emitter Mode 设为 GRAVITY 时生效
Rotation Is Dir 每个粒子的旋转是否等于其方向。仅在 Emitter Mode 设为 GRAVITY 时生效
Start Radius 初始半径及变化范围,表示粒子发射时相对发射器的距离。仅在 Emitter Mode 设为 RADIUS 时生效
End Radius 结束半径。仅在 Emitter Mode 设为 RADIUS 时生效
Rotate Per S 粒子每秒围绕起始点的旋转角度及变化范围。仅在 Emitter Mode 设为 RADIUS 时生效
Src Blend Factor 混合显示两张图片时,原图片的取值模式。
Dst Blend Factor 混合显示两张图片时,目标图片的取值模式。

组建上的属性都有注解
初学粒子系统

如何用代码控制粒子

初学粒子系统
外面组件是在想要的粒子效果的节点上加一个ParticleSystem组件。初学粒子系统

一款免费制作粒子的工具

如果你不满足组建的设置也可以用软件制作自己喜欢的粒子效果,网址:http://www.effecthub.com/particle2dx

用粒子实现烟花效果

代码

cc.Class({
    extends: cc.Component,
    properties: {
        //声明预制体
        fireworks:cc.Prefab,
    },
    start () {
        // 烟花对象池
        this.fireworksPool = new cc.NodePool();
        // 预先放20个烟花进去
        var initCount = 20;
        for(var i = 0;i < initCount;i ++){
            //创建烟花节点
            var fireworks = cc.instantiate(this.fireworks);
            //通过put接口放入对象池
            this.fireworksPool.put(fireworks);
        }
        // 计时器,从第0秒开始,每隔1秒放一个,放15+1=16次
        this.schedule(this.createfireworks,1,15,0);
    },
 
    // 制造烟花
    createfireworks(){
        // 通过size接口判断对象池中是否有空闲的对象
        if(this.fireworksPool.size() > 0) {
            var fireworks = this.fireworksPool.get();
        }
        else {
        //如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建
            var fireworks = cc.instantiate(this.fireworks);
        }
        // 设置父节点
        fireworks.parent = this.node;
        // 随机位置(960 * 640)
        fireworks.x =  -450+960 * Math.random();
        fireworks.y =  -320+640 * Math.random();
        // resetSystem()函数重置发射器,开始发射粒子;
        fireworks.getComponent(cc.ParticleSystem).resetSystem();
        // 4秒后自动回收
        this.scheduleOnce(function(){
            // 回收之前stopSystem();
            fireworks.getComponent(cc.ParticleSystem).stopSystem();
            this.fireworksPool.put(fireworks);
        },4);
    },


});

粒子组建的调试如下
初学粒子系统
效果图如下
初学粒子系统

相关文章: