zoukankan      html  css  js  c++  java
  • COCOS学习笔记--粒子系统

    一.粒子系统的简单介绍

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

     

    二.粒子的种类介绍

    下图为粒子系统类关系图:

     

    ParticleSystem为粒子系统的父类。ParticleSystemQuad为方形粒子系统类。在cocos3.0版本号之前还有ParticleSystemPoint即点形粒子系统,3.0版本号后被去掉了。

    ParticleSystemQuad有下面各种各样的子类,我们能够直接用create()方法创建出下面各种粒子特效。addChild()后就能够播放特效了:

    ParticleExplosion 爆炸粒子

    ParticleFire 火焰粒子

    ParticleFireworks 烟火粒子

    ParticleFlower 花瓣粒子

    ParticleGalaxy 银河粒子

    ParticleMeteor 流星粒子

    ParticleRain 雨滴粒子

    ParticleSmoke 烟雾粒子

    ParticleSnow 雪粒子

    ParticleSpiral 旋涡粒子

    ParticleSun 阳光粒子


    三.粒子的属性设置

    粒子发射器以及发射出来的粒子有好多属性能够供我们设置:

    _duration 发射器生存时间,即它能够发射粒子的时间。注意这个时间和粒子的生存时间不同。单位秒,-1表示永远:粒子发射结束后可点击工具栏的播放button再次发射;

    _emissionRate 发射器每秒喷发的粒子数目;

    _totalParticles 场景中存在的最大粒子数目,往往与_emissionRate配合起来使用;

    isAutoRemoveOnFinish 粒子结束时是否自己主动删除;

    _emitterMode 喷发器模式。有重力模式(GRAVITY)和半径模式(RADIUS。也叫放射模式)两种;


    重力模式(modeA):

    顾名思义。重力模式是模拟重力,可让粒子环绕一个中心点移近或移远。它的长处是很动态,并且移动有规则。

    下列各属性仅仅在重力模式下起作用:

    gravity 重力X;

    radiaAccel 粒子径向加速度。即平行于重力方向的加速度;

    radiaAccelVar 粒子径向加速度变化范围;

    speed 速度。

    speed Var 速度变化范围。

    tangentialAccel 粒子切向加速度,即垂直于重力方向的加速度。

    tangentialAccelVar 粒子切向加速度变化范围


    半径模式(modeB):

    半径模式能够使粒子以圆周方式旋转,它也能够创造螺旋效果让粒子急速前进或后退。下列属性仅仅在半径模式下起作用:

    endRadius 结束半径

    endRadiusVar 结束半径变化范围,即结束半径值的范围在(endRadius-endRadiusVar)和(endRadius+endRadiusVar)之间,以下类似;

    rotatePerSecond 粒子每秒环绕起始点的旋转角度;

    rotatePerSecondVar 粒子每秒环绕起始点的旋转角度变化范围;

    startRadius 初始半径。

    startRadiusVar 初始半径变化范围。


    生命属性:

    _life 粒子生命,即粒子的生存时间。

    _lifeVar 粒子生命变化范围;


    大小属性:

    _endSize 粒子结束时的大小,-1表示和初始大小一致;

    _endSizeVar 粒子结束大小的变化范围;


    角度属性:

    _angle 粒子角度;

    _angleVar 粒子角度变化范围;


    颜色属性:

    _endColor 粒子结束颜色;

    _endColorVar 粒子结束颜色变化范围;

    _startColor 粒子初始颜色;

    _startColorVar 粒子初始颜色变化范围。

    假设你不想编辑出五颜六色的粒子效果,那应该把_endColorVar,_startColorVar尽量设置为(0,0,0,0)。


    位置属性:

    _sourcePosition发射器原始坐标位置;

    _posVar 发射器位置的变化范围(横向和纵向);

    _positionType 粒子位置类型。有自由模式(FREE)、相对模式(RELATIVE)、和打组模式(GROUPED)三种。

    FREE自由模式,相对于屏幕自由,不会随着粒子节点移动而移动(可产生火焰、蒸汽等效果)。

    RELATIVE相对模式,相对于被绑定的node精巧。粒子发射器会随node移动而移动,可用于制作移动角色身上的特效等等。

    GROUPED打组模式 是相对于发射点的。粒子随发射器移动而移动;


    自旋属性:

    _endSpin 粒子结束自旋角度。

    _endSpinVar 粒子结束自旋角度变化范围;

    _startSpin 粒子開始自旋角度。

    _startSpinVar 粒子開始自旋角度变化范围。



    四.编写代码生成粒子

    直接使用create()方法创建出特效,然后addChild(),比方:

    创建爆炸效果粒子特效:

    //參数:粒子数
    auto _pe = ParticleExplosion::createWithTotalParticles(200);
    addChild(_pe);

    执行效果:

     

    创建火焰效果粒子特效:

    //參数:粒子数
    auto _pf = ParticleFire::createWithTotalParticles(200);
    addChild(_pf);

    执行效果:


     

    另外。基类ParticleSystemQuad设置属性可调整效果:

    </pre>/<pre name="code" class="cpp">/创建ParticleSystemQuad
    ParticleSystemQuad * _emitter = ParticleSystemQuad::createWithTotalParticles(300);
    _emitter->retain();
    addChild(_emitter,10);
    
    //设置粒子使用哪一张贴图
    _emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("haha.jpg"));
    
    //设置发射器持续时间
    //-1为永远存在
    _emitter->setDuration(-1);
    
    //设置重力
    _emitter->setGravity(Vec2::ZERO);
    
    //设置角度及其变化范围
    _emitter->setAngle(90);
    _emitter->setAngleVar(360);
    
    //设置速度及其变化范围
    _emitter->setSpeed(160);
    _emitter->setSpeedVar(20);
    
    //设置粒子半径及其变化范围
    _emitter->setRadialAccel(-120);
    _emitter->setRadialAccelVar(0);
    //设置正切角度及其变化范围
    _emitter->setTangentialAccel(30);
    _emitter->setTangentialAccelVar(0);
    
    //设置发射器位置
    _emitter->setPosition(Vec2(160,240));
    
    //设置粒子生命周期及其变化范围
    _emitter->setLife(3);
    _emitter->setLifeVar(1);
    
    //设置粒子開始、结束旋转角度
    _emitter->setStartSpin(0);
    _emitter->setStartSpinVar(0);
    _emitter->setEndSpin(0);
    _emitter->setEndSpinVar(2000);
    
    //设置粒子颜色
    Color4F startColor(0.5f,0.5f,0.5f,1.0f);
    _emitter->setStartColor(startColor);
    Color4F startColorVar(0.5f, 0.5f, 0.5f, 1.0f);
    _emitter->setStartColor(startColorVar);
    Color4F endColor(0.1f, 0.1f, 0.1f, 0.2f);
    _emitter->setStartColor(endColor);
    Color4F endColorVar(0.1f, 0.1f, 0.1f, 0.2f);
    _emitter->setStartColor(endColorVar);
    
    //设置粒子大小
    _emitter->setStartSize(30.0f);
    _emitter->setStartSizeVar(0.0f);
    _emitter->setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE);
    
    //设置发射速率
    _emitter->setEmissionRate(_emitter->getTotalParticles()/_emitter->getLife());
    
    //设置闪现效果
    _emitter->setBlendAdditive(false);
    

    执行效果:

     




    以上。


  • 相关阅读:
    内部类
    java的静态方法多态和匿名对象
    java的重载 和重写
    java多态成员的特点
    java 接口的概念
    linux时间修改-hwclock和date
    mysql配置主从复制和常见问题
    mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志
    mysql主从复制介绍
    mysql备份与还原-mysqldump备份、mysql与source还原
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7351292.html
Copyright © 2011-2022 走看看