今天我们来看看粒子特效, 何为粒子特效, 为了模拟燃烧的火焰, 天空飘下来的血环, 滴落的小雨, 这些无规律变化的物体, 我们引进了粒子特效这个名词, 粒子特效的原理是将无数的单个粒子组合使其呈现出固定形态,借由控制器,脚本来控制其总体或单个的运动,模拟出现真实的效果,
有朋友会问, 为什么我们不使用序列帧动画呢, 由于序列帧动画是固定的运动方式, 不能模拟出粒子的无规则运动, 所以我们才使用的粒子特效, 并且绘制的动画多了, 会严重的影响帧率, cocos2dX里面的粒子特效优化的就还不错, 能够看到我们待会儿绘制出粒子之后帧率基本上不会发生多大的改变

CCParticleSystem是cocos2dX为我们提供的粒子系统, 我们来看看CCParticleSystem为我们提供了什么

产生粒子:
也被称作粒子发射器

更新粒子状态:
引擎会随时间更新粒子的位置, 速度以及其它状态

回收无效粒子:
当粒子的生存周期结束后, 会被系统回收

 因此, 为了创建一个粒子效果, 我们须要定义粒子怎样产生以及状态怎样改变。

cocos2dX里面已经为我们提供了一些经常使用的粒子, 我们来看看有哪些:

CCParticleExplosion //爆炸粒子效果

CCParticleFireworks //烟花粒子效果

CCParticleFire //火焰粒子效果

CCParticleFlower //花束粒子效果

CCParticleGalaxy //星系粒子效果

CCParticleMeteor //流星粒子效果

CCParticleSpiral //漩涡粒子效果

CCParticleSnow //雪粒子效果

CCParticleSmoke //烟粒子效果

CCParticleSun //太阳粒子效果

CCParticleRain //雨粒子效果

经常使用的函数:

setTexture( CCTexture2D);
//设置特效纹理贴图

setAutoRemoveOnFinish(
bool); //设置自己主动释放true为自己主动释放。

setPositionType( 移动类型) //设置移动类型

setStartColor( ccc4f);
//设置粒子RGBA值

setBlendAdditive( bool);
//是否加入混合

setAutoRemoveOnFinish( bool);
//是否自己主动移除死亡粒子

移动类型:

kCCPositionTypeFree //自由模式: 粒子不与发射器联系

kCCPositionTypeRelative //相对模式: 粒子发射器尾随节点

kCCPositionTypeGrouped //相对模式: 粒子尾随发射器

并且cocos2dX还同意我们自定义粒子使用:

CCParticleSystemQuad::create( plist文件);

嗯, 说了这么多, 我们还是先来看看怎样创建一个粒子吧, 非常easy的:

//创建一个火焰粒子
CCParticleSystem* particle = CCParticleFire::create();
particle->setTexture( CCTextureCache::sharedTextureCache()->addImage( "CloseSelected.png"));//加入纹理贴图
particle->setAutoRemoveOnFinish( true); //设置自己主动移除
particle->setPosition( ccp( visibleSize.width / 2, 0));
addChild( particle);

对, 就是这么简单, 一个火焰粒子就做好了( 旁白: 你确定你没有骗我?), 我们看看效果:

看看, 出来了吧, 帧率也是60, 没有下降哦( 旁白: 还不是骗我了, 那是火焰么? 怎么感觉像鬼火一样), 额, 这是我为了偷懒, 使用了那个蓝色的关闭button造成的( 旁白: 必须换过来, 大半夜的, 你吓人啊), 看着旁白妹纸快要发火了, 我还是决定换一张图片吧,
话说这张看起来不错啊, 我们再来看看效果:

看起来没差别啊, 假设有人看出差别了, 请无视我的美术

嗯, 粒子特效就是这么简单, 大家把其它的也加上去看看效果吧,

我们再来看看自己定义粒子效果, 我这里使用的是红孩儿工具箱, 这是粒子编辑界面:

我们来看看重力參数:

gravity( Point); //粒子系统的重力。

speed( float); //粒子们射出的速度。

speedVar( float); //速度变量

tangencialAccel( float); //粒子们的正切加速度

tangencialAccelVar( float); //粒子们正切加速度的变量

radialAccel( float); //粒子们的半径加速度。

radialAccelVar( float); //粒子们半径加速度的变量

半径參数:

startRadius( float); //粒子的開始半径

startRadiusVar( float); //開始半径变量

endRadius( float); //粒子的结束半径

endRadiusVar( float); //结束半径变量

rotatePerSecond( float); //环绕一个来源点的每秒旋转角度

rotatePerSecondVar( float); //每秒旋转角度变量

常规參数:

startSize:粒子的初始尺寸(像素值)

startSizeVar

endSize:粒子的结束尺寸(假设你想让粒子的開始大小同结束大笑同样,就用一下kCCParticleStartSizeEqualToEndSize

endSizeVar

startColor :粒子開始颜色(ccColor4F)

startColorVar

endColor :粒子结束颜色

endColorVar

startSpin:仅用在CCParticleSystemQuad中,起始螺旋度

startSpinVar

endSpin:仅用在CCParticleSystemQuad中,结束螺旋度

endSpinVar

life粒子的生命生存时间,单位是秒

lifeVar

angle:粒子開始角度,float

angleVar

positon:CCPoint粒子位置

positonVar

centerOfGravity :CGPoint

我们在粒子编辑器里面做一个火焰:

保存起来, 我们将会得到一个plist文件, 这里面就保存了我们的粒子的配置, 我们直接使用就能够了:

//加入自己定义粒子特效
CCParticleSystem* particle2 = CCParticleSystemQuad::create( "fire.plist");
particle2->setPosition( ccp( visibleSize.width - 60, 0));
addChild( particle2);

看看效果:

有的朋友可能会出现故障, 假设出现故障了, 就看看plist文件最以下的图片文件路径对不正确:

好了  今天我们就到这里了, 晚安哦, 各位

cocos2dX 之CCParticle的更多相关文章

  1. Cocos2d-x学习之 整体框架描述

    1.Cocos2d-x 整体描述 和传统的游戏引擎一样,cocos2d-x作为一个2d的游戏引擎,其也有以下几大概念组成: 导演(CCDiretor): 在cocos2d-x引擎中,CCDirecto ...

  2. cocos2dx调用浏览器打开网址

    安卓端cocos2dx/platform/android路径下CCApplication.h: virtual void openURL(const char* pszUrl); CCApplicat ...

  3. 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码

    前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...

  4. Cocos2d-x不要随便在onEnter里面addChild

    使用任何版本的Cocos2d-x(1.x,2.x,3.0),在onEnter中调用addChild,都要小心谨慎,因为它有可能导致两种莫名其妙的BUG,莫名其妙的BUG当然难以定位了!更何况这个BUG ...

  5. Cocos2dx中线程优先级

    Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...

  6. cocos2d-x事件EventListenerTouchOneByOne没反应

    今天写了 cocos2d-x事件EventListenerTouchOneByOne,发现死活没反应,原代码复制到新工程没问题啊, 后来发现cocostudio用的基础容器(ccui.Layout:c ...

  7. cocos2d-x 3.5以后版本的 luasocket

    cocos2d-x 3.5后使用luasocket:local SOCKET = require "socket"; 结果运行就报错:[LUA-print] USE " ...

  8. cocos2d-x内存管理

    Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一.   为什么需要内存管理 1. new和delete 2. 堆上申 ...

  9. cocos2d-x屏幕分辨率,窗口大小总结

    这个东西很烦人,相信很多人都不理解 今天来总结一下,首先有很多概念都要事先弄得清楚明白 1.屏幕分辨率 所谓屏幕分辨率相信很多人都知道他的概念,不就是1280pxX720PX吗?不就是这种形式吗?有什 ...

随机推荐

  1. 开始着手Oracle中Scott用户的管理系统

    准备好长时间,一直想把最近所学用于实践,正好想到Oracle的Scott用户的表设计还算合理,且自己也很熟悉,现将整个系统的架构设定如下: 1.数据库不用说,Oracle 11g 的 Scott 用户 ...

  2. Linux下可执行程序调试信息的分离及release程序的调试

      前两天在群里看到在讨论如何把debug版中的符号表加到release版本中,觉得这个非常有用,所以学习一下. 使用的工具是objcopy. 如果要生成单独的调试信息文件,命令如下: objcopy ...

  3. [ACM] n划分数m部分,它要求每一个部分,并采取了最大的产品(间隔DP)

    A - 爱管闲事 春希很爱管闲事,他每天都会抽出时间帮助一些同学,因为春希很死板,出于公平性,春希不会先帮助后来找他的同学. 如今有n个同学须要他的帮助,尽管他非常想一天之类帮助全部人,但毕竟精力有限 ...

  4. Google的Java经常使用类库 Guava

    Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包括很多 Google 核心的 Java 经常使用库. 1. 基本工具 [Basic utilities]     让使用Java ...

  5. timesetevent与timekillevent的用法

    unit Unit1; interface uses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs ...

  6. Theano学习笔记(二)——逻辑回归函数解析

    有了前面的准备,能够用Theano实现一个逻辑回归程序.逻辑回归是典型的有监督学习. 为了形象.这里我们如果分类任务是区分人与狗的照片. 首先是生成随机数对象 importnumpy importth ...

  7. Cordys BOP 4平台开发入门实战演练——Webservices开发(0基础)

    0.文章导读 本文档针对Cordys BOP-4 WS-AppServer基础功能进行验证和高速开发指导.(高级实践文档请參考兴许文档). 0.1.WS-AppServer概述 WS-AppServe ...

  8. Swift - 内存泄露原因(循环强引用)及解决办法

    Swift使用自动引用计数(ARC)来管理应用程序的内存使用.在大多是情况下,并不需要考虑内存的管理.当实例不再需要的时候,ARC会自动释放这些实例所使用的内存. 但ARC并不是绝对安全的.下面两种情 ...

  9. Entity FramWork - 在VS里面直接创建表,并同步到数据库

    前面具体添加什么直接看: 1.Entity - 使用EF框架进行增删改查 - 模型先行 2.Entity - 使用EF框架进行增删改查 - 数据库先行 然后: 然后右键,可以添加[实体],也就是表.之 ...

  10. 【Demo 0004】Android 布局

    本章学习要点:        1.  了解Android 常见的四种布局结构;        2.  掌握四种布局及混合布局的使用方法:        3.  掌握布局中定义键值的意义以及参数使用方法 ...