一.粒子系统的简单介绍

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

执行效果:

以上。

COCOS学习笔记--粒子系统的更多相关文章

  1. COCOS学习笔记--重力感应Acceleration

    Cocos2dx重力感应Acceleration,准确来说叫加速度计,加速度计能够感应设备上X.Y.Z轴方向上线性加速度的变化.事实上叫"重力感应"或"重力加速度计&qu ...

  2. COCOS学习笔记--Cocod2dx内存管理(三)-Coco2d-x内存执行原理

    通过上两篇博客.我们对Cocos引用计数和Ref类.PoolManager类以及AutoreleasePool类已有所了解,那么接下来就通过举栗子来进一步看看Coco2d-x内存执行原理是如何的. / ...

  3. cocos学习笔记:快速上手

    cc.Class({ //奇怪的语法风格,cc.class, extends: cc.Component, //扩展自cc.Component properties: { //类的属性设置 jumpH ...

  4. COCOS学习笔记--关于使用cocostudio打安卓包

    我在之前的博客里也写到过,如今cocos引擎提供了一键打包.很方便. 今天正好做个測试,想用引擎的一键打包弄个apk的安卓包.以下就简介一下详细过程和自己的一些理解: 先说一下项目背景,因为我的电脑是 ...

  5. COCOS学习笔记--即时动作ActionInstant

    Cocos引擎中的动作类的关系图例如以下: 能够看出,Action是继承自Ref类的,之前我的博客中也有讲过,Ref类是cocos2dx全部类的基类.动作类(Action)是全部动作的基类.它通过cr ...

  6. COCOS学习笔记--Button类及其相关控件属性

    一.Button介绍 Button就是button.Cocos中提供了Button类对button进行相关的操作.我们看一下Button类继承关系图: 能够看到.Button是继承自Widget类,W ...

  7. COCOS学习笔记--持续动作ActionInterval

    上一篇博客介绍了即时动作ActionInstant.与即时动作相对的是持续动作ActionInterval. 顾名思义,持续动作就是须要一段时间来持续运行的动作,而且在有限时间内改变运行对象的一些属性 ...

  8. COCOS学习笔记--单点触控

    这篇博客来总结下cocos单点触控的相关内容: 我们在Layer类的源代码中能够看到.Layer类提供了一下4个与屏幕单点触控相关的回调方法: onTouchBegan().onTouchMoved( ...

  9. COCOS学习笔记--变速动作Speed和ActionEase

    变速动作和复合动作类似.也是一种特殊的动作,它能够把不论什么动作依照改变后的速度运行.变速动作与复合动作最大的差别就是复合动作仅仅是单纯的组合一系列动作,而变速的做在组合一系列动作后还要去改变动作的运 ...

随机推荐

  1. XDM、GDM和KDM

    XDM.GDM.KDM是三种X Window的显示管理器 (1)XDM(默认的X Window System Display Manager)(2)GDM(gnome提供的Display Manage ...

  2. mysql安装三 linux源码安装mysql5.6.22

    http://blog.csdn.net/beiigang/article/details/43053803

  3. c++中两个类相互包含引用的相关问题

    在构造自己的类时,可能会遇到两个类相互引用的问题. 例如: class A { int i; B b; }; class B { int i; A a; }; 在这种情况下,这样就会出现一个死循环a. ...

  4. BitmapFactory.Options.inSampleSize 的使用方法

    BitmapFactory.decodeFile(imageFile); 用BitmapFactory解码一张图片时.有时会遇到该错误. 这往往是因为图片过大造成的. 要想正常使用,则须要分配更少的内 ...

  5. MapReduce实现排序功能

    期间遇到了无法转value的值为int型,我採用try catch解决 str2 2 str1 1 str3 3 str1 4 str4 7 str2 5 str3 9 用的\t隔开,得到结果 str ...

  6. Access control configuration prevents your request from being allo

    我发现在在XP环境下我输入网易的220.181.28.42也找不到网页,就跟在LINUX下一样 都揭示: 错误 您所请求的网址(URL)无法获取 --------------------------- ...

  7. 第二章 mybatis使用注解实现in查询(mysql)

    mybatis实现in查询,两种方法: xml形式(推荐) 注解方式(个人喜欢注解,但是in场景可能不太适合注解) 代码: @Select("<script>" + & ...

  8. Length of Last Word leetocde java

    题目: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return t ...

  9. android.net.Uri 简介 API

    android.net.Uri 简介 public abstract class android.net.Uri extends Object implements Parcelable, Compa ...

  10. 一行代码轻松实现拖动效果[JQuery]

    写JS实现拖动需要一大堆不便维护的代码,实属麻烦,Google了大半天,发现了一个优秀的Jquery插件EasyDrag,只需要一行代码便可轻松在主流浏览器上 实现拖动效果.   $(document ...