一.粒子系统的简单介绍

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

    http://blog.csdn.net/robertsong2004/article/details/38499995

  2. POJ 3740 Dancing Links

    Dancing Links学习:http://www.cnblogs.com/steady/archive/2011/03/15/1984791.html 以及图文学习:http://www.cnbl ...

  3. RobotFramework自动化4-批量操作案例

    前言 有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象.Selenium2library提供了Get Webelements 关键字,用于定位一组元素 以百 ...

  4. nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid”

    在Mac上用brew安装Nginx,然后修改Nginx配置文件,再重启时报出如下错误: nginx: [error] invalid PID number "" in " ...

  5. [翻译] 用 ObjectiveSugar 扩展NSArray NSDictionary NSSet NSNumber

    source - https://github.com/supermarin/ObjectiveSugar Look like a girl, act like a lady, think like ...

  6. JDBC连接oracle RAC数据库配置

    RAC的配置如下: node1:ip地址192.168.60.132,实例名:rac1,主机名:rac1 node2:ip地址192.168.60.144,实例名:rac2,主机名:rac2 RAC服 ...

  7. 淘宝Tprofiler工具实现分析

    工具介绍TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据 ...

  8. 解决 Ubuntu Software (Software Center) Crash 问题

    问题描述: no application data found 解决方式: sudo apt purge gnome-software ubuntu-software sudo apt autorem ...

  9. UVA 10012 How Big Is It?(暴力枚举)

      How Big Is It?  Ian's going to California, and he has to pack his things, including his collection ...

  10. Cesium随笔(5)CZML介绍(介个文章是转的嘿嘿)【转】

    通过czml可以在cesium上实现非常棒的动态效果 (1)Cesium Language (CZML) 入门--CZML Structure(CZML的结构) 原文地址:https://github ...