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);

执行效果:

以上。

时间: 2024-08-25 13:00:54

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

COCOS学习笔记--TexturePacker使用详解

本文转载于:http://blog.csdn.net/gzy252050968/article/details/50708464 一.TexturePacker的优点 TexturePacker是一款把若干资源图片拼接为一张大图的合图工具,在游戏开发以及网页制作中经常会使用到这个工具.为什么需要使用这个工具呢? 1.我们知道,大部分游戏引擎底层的渲染方式都是基于OpenGL的,但是,你知道吗?OpenGL载入纹理图片时,所用内存会自动扩张到2的N次方.比如,一张图片的大小为10*10像素,Ope

cocos学习笔记

搭建cocos环境,去官网下载cocos引擎,我用的是cocos2.2.6版本,已经老了.使用的编译环境是vs2013.下载python,我使用的是python2.7. 解压vs2013,并进行安装. 安装python,我这里安装到了c盘下面. 在全部安装完成之后,右键我的电脑-->属性-->高级系统设置-->环境变量 找到PATH,在后面添加你python的路径,要以;号来进行分割 安装完之后,cmd,运行python,出现下面画面,说明安装成功. 然后通过命令行,在cocos引擎解压

COCOS学习笔记--复选框CheckBox及其控件属性

一.Button介绍 游戏开发中有时我们会用到CheckBox,CheckBox就是复选框,大家应该都见过复选框,它有两个状态,一个勾选态,一个非勾选态,我们可以通过CheckBox在这两个状态间的切换来实现一些特定的判断功能,比如是否游戏关闭音效等. CheckBox也和cocos提供的其他控件一样,我们可以在Cocos Studio中创建并设置相关属性,在代码工程中使用:也可以之间在代码工程中创建使用.CheckBox类提供了对复选框的相关方法,其继承自Widget类: 接下来就通过实例来看

COCOS学习笔记--Cocos引擎渲染流程

近期在研究Cocos引擎的渲染流程.在这里将其整个渲染流程进行一下梳理: 梳理之前我们要知道一些东西,就是我们的Cocos引擎是通过使用OpenGL的一些API来进行渲染绘制的,所以假设我们要彻底理解Cocos引擎的渲染流程并想改动引擎底层渲染的相关内容,熟悉OpenGL是非常有必要的. 这里先简单说一下大概流程,Cocos3.x版本号的渲染是将全部须要渲染的node先通过各种RenderCommand封装起来,你先不用管RenderCommand是什么,仅仅须要记住它把我们要渲染的node封装

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

变速动作和复合动作类似.也是一种特殊的动作,它能够把不论什么动作依照改变后的速度运行.变速动作与复合动作最大的差别就是复合动作仅仅是单纯的组合一系列动作,而变速的做在组合一系列动作后还要去改变动作的运行速度. 变速动作主要分为2大类:Speed和ActionEase. 一.Speed 用于线性地改变某个动作的速度,也就是说成倍数的改变某动作的总体速度. Speed相当于一个包装器,将须要改变速度的动作包装到当中. Speed类源代码能够在CCAction类中看到: class CC_DLL Sp

Cocos Studio1.5.0.1开发学习笔记(一)

听说Cocos Studio很久了,主要是因为骨骼动画.目前看来Cocos2d-x播放动画的方式只有2种: 第一种:是播放序列帧动画,即将动画的每一帧都加载进缓存里,需要播放时再使用Animation类来播放,这种方法简单暴力,应对一些细节要求低的动画场景的时候,这么干无伤大雅.但是当动画帧数稍高的时候就会需要大量的图片,消耗资源很大. 第二种:是由Cocos2d-x提供的Action类来播放动画,这种动画是在帧循环中靠调整每次渲染的坐标来打到动画效果,由于帧循环是1/60秒刷新一次,会让这样播

cocos2dx游戏开发学习笔记2-从helloworld开始

一.新建工程 具体安装和新建工程的方法在cocos2dx目录下的README.md文件中已经有详细说明,这里只做简单介绍. 1.上官网下载cocos2dx-3.0的源码,http://www.cocos2d-x.org/ 2.安装python2.7 3.运行setup.py安装 4.执行cocos new helloworld -p helloworld -l cpp,生成新工程 二.新建工程中包含的东西 -Classes AppDelegate.cpp      -----游戏真正开始执行的地

cocos2dx游戏开发&mdash;&mdash;微信打飞机学习笔记(三)&mdash;&mdash;WelcomeScene的搭建

一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何划分好游戏的场景,是开始动手做游戏的第一步. 3.一个场景会有很多层,用来处理场景不同的功能. 4.而精灵则是最小的单位,比如子弹,飞机,敌机都是一个个的精灵所组成的.   二.WelcomeScene的搭建: 1.场景和层的二种搭建方法: (1)一种就是跟HelloWorld示例一样的方法,以一个

cocos2dx学习笔记(2)

昨天尝试了cocos2dx在win下的开发环境配置,并且运行了cocos的helloword程序,晚上想要尝试一下android开发环境配置,顺便学习cocos在eclipse下的JNI机制,按照cocoa中文论坛的android环境配置弄了NDK,并配置了环境变量,由于想要学习cocos的luabind机制(这个我们公司游戏的引擎用的很多,确实比较有兴趣),一切搞定不明就里的用eclipse导入了cocos3.0rc中的tests目录下的cpp-tests工程(这算android开发久了的毛病