cocos2d-x 粒子效果

大规模运动的物体通常有两种方法实现

1,使用帧动画来模拟

2,粒子效果

粒子系统有CCParticleSystem类实现,CCParticleSystem实现了对粒子的控制与调度,对粒子的操作包括:

1,产生粒子

2,更新粒子状态

3,回收无效粒子

粒子系统继承自CCNode ,可以添加到其他节点之中

cocos2d-x内置了一些粒子效果如:

- CCParticleSystem(所有粒子系统的父类)

-- CCParticleSystemPoint、CCParticleSystemQuad (点粒子和方形粒子系统,都继承了CCParticleSystem的所有属性)

-- CCParticleExplosion  :爆炸粒子效果

-- CCParticleFireworks  :烟花粒子效果

-- CCParticleFire             :火焰粒子效果

-- CCParticleFlower       :花束粒子效果

-- CCParticleGalaxy        :星系粒子效果

-- CCParticleMeteor       :流星粒子效果

-- CCParticleSpiral         :漩涡粒子效果

-- CCParticleSnow         :雪粒子效果)

-- CCParticleSmoke      :烟粒子效果

-- CCParticleSun            :太阳粒子效果

-- CCParticleRain          :雨粒子效果

例子:

ParticleSystem *particle = ParticleSnow::create();

particle->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.png"));

this->addChild(particle);

上面这段代码添加到init里面就可以看到雪花的粒子效果

首先需要知道的是粒子的发射器模式,不同发射器模式下有不同的可用参数,也因此会产生不同的效果,这个就有点像是模具,用什么模具就生成出什么样的模型产品,如果随便引用参数那是有可能会报错的:

1.重力模式->setEmitterMode(kCCParticleModeGravity)

重力模式下可以按照设定的重力点setGravity,根据附加参数如速度、径向加速度、切向加速度……来获得对应的粒子效果。

2.半径模式->->setEmitterMode(kCCParticleModeRadius)

这个模式下,粒子的活动范围、动作是按圆形、半径来划分的,像上面的爆炸中心效果我就设定粒子初始产生的活动半径范围和粒子生命周期结束时活动的半径范围。

粒子还有三种关于运动位置坐标的影响模式->setPositionType(),这里引用一段解释:

假设粒子发射器A被加入了SpriteB,  ( B->addChild(A) )

1.kCCPositionTypeFree

当B运动时,若设置Free,A发出的粒子则会出现拖尾现象。若设置其他的,则不会出现拖尾。

2.kCCPositionTypeRelative

当A相对B中坐标变动的时,若设置Relative,A发出的粒子则会出现拖尾现象。

3.kCCPositionTypeGrouped

而设置Grouped,不管什么坐标改变都不会发生拖尾现象。

总结,Free是相对于世界,Relative相对于父节点,Grouped是相对于发射器坐标。

@1——根据 plist 文件创建粒子系统:

  1. CCParticleSystemQuad *emitter1 = CCParticleSystemQuad::create("Particle/BurstPipe.plist");
  2. emitter1->setPosition(ccp( size.width/2,    size.height/2));    // 设置发射粒子的位置
  3. emitter1->setAutoRemoveOnFinish(true);                          // 完成后制动移除
  4. emitter1->setDuration(10);                                      // 设置粒子系统的持续时间秒
  5. this->addChild(emitter1, 0, 1);

不使用plist文件创建粒子效果

auto size = Director::getInstance()->getWinSize();

auto m_emitter = ParticleSystemQuad::createWithTotalParticles(900);

m_emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png"));

//The code below we can use both in 2.x and 3.x

m_emitter->setDuration(-1);

m_emitter->setGravity(Point(0, -240));  // in Cocos2d-x-2.x CCPoint(0, -240) is used

m_emitter->setAngle(90);

m_emitter->setAngleVar(360);

m_emitter->setRadialAccel(50);

m_emitter->setRadialAccelVar(0);

m_emitter->setTangentialAccel(30);

m_emitter->setTangentialAccelVar(0);

m_emitter->setPosition(Point(size.width / 2, size.height));

m_emitter->setPosVar(Point(400, 0));

m_emitter->setLife(4);

m_emitter->setLifeVar(2);

m_emitter->setStartSpin(30);

m_emitter->setStartSpinVar(60);

m_emitter->setEndSpin(60);

m_emitter->setEndSpinVar(60);

m_emitter->setStartColor(Color4F(255,255,255,1));

m_emitter->setStartColorVar(Color4F(0,0,0,0));

m_emitter->setEndColor(Color4F(255, 255, 255, 1));

m_emitter->setEndColorVar(Color4F(0, 0, 0, 0));

m_emitter->setStartSize(30);

m_emitter->setStartSizeVar(0);

m_emitter->setEndSize(20.0f);

m_emitter->setEndSizeVar(0);

m_emitter->setEmissionRate(100);

addChild(m_emitter,10);

在重力模式中,以下属性是合法的:

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

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

speedVar(float)速度变量

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

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

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

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

半径模式有下列合法的属性:

startRadius (a float).粒子的开始半径

startRadiusVar (a float). 开始半径变量

endRadius (a float). 粒子的结束半径

endRadiusVar (a float).结束半径变量

rotatePerSecond (a float).围绕一个来源点的每秒旋转角度

rotatePerSecondVar (a 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

系统通用属性:

emissionRate duration (a float):每秒有多少粒子被发射

duration (a float):粒子系统生存时间

blendFunc (a ccBlendFunc):用于系统渲染的OpenGL的渲染函数

positionType (a tCCPositionType).:使用kCCPositionTypeFree (默认值)属性可以自由的移动粒子们。或者使用kCCPositionTypeGrouped 让粒子们一组一组的移动。

texture (a CCTexture2D).粒子的纹理

时间: 2024-11-05 21:39:32

cocos2d-x 粒子效果的相关文章

Cocos2D v3.4.9粒子效果不能显示的原因分析及解决办法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在游戏App中为了衬托气氛我们往往使用一些特殊的图形效果,粒子效果无疑是其中最为常用,也最为方便的一种. 正常使用下,粒子效果的确很稳定,但是本猫最近在RPG游戏里却遇到了粒子效果不能显示的问题,调试着实花了一些功夫.现将问题现象,分析以及解决方法记录下来和大家一起分享,也便于以后回忆查找. 问题现象很简单,就是粒子效果不显示-但也不是所有粒子效果都不显示,只

Cocos2d 粒子效果

第一种方法:自定义 [cpp] view plaincopy //建立一个粒子系统 CCParticleSystem* pParticleSystem=new CCParticleSystemQuad(); //产生300个粒子 pParticleSystem->initWithTotalParticles(300); //设置粒子图片 pParticleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage(&

C#学习日志 day9 -------------- cocos2d-x 3.0 粒子效果简介

cocos2d是一款实用的游戏引擎,其可以在windows phone中应用,但是比较差强人意的是其代码只能用c++来写. 因为我们的wp应用我负责粒子效果的实现,所以这里我介绍一下各种粒子效果. cocos2d中自带了十种粒子效果.可以说,一般的效果我们都可以用cocos2d自带的粒子效果实现.即使不能我们也可以通过对其自带粒子效果进行一些属性的调整从而实现我们想要的效果. 这里先贴出十种粒子效果的实现代码 ParticleRain *snow = ParticleRain::create()

6 cocos2dx粒子效果,类图关系,系统原生粒子和自己定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果

?? 1 粒子 演示样例 2 类图关系 3 系统原生粒子 CCParticleSystem 全部粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad 点粒子和方形粒子系统,都继承了CCParticleSystem的全部属性 CCParticleExplosion 爆炸粒子效果 CCParticleFireworks 烟花粒子效果 CCParticleFire 火焰粒子效果 CCParticleMetepr 流行粒子效果 CCParticleSpi

6 cocos2dx粒子效果,类图关系,系统原生粒子和自定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果

 1 粒子 示例 2 类图关系 3 系统原生粒子 CCParticleSystem 所有粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad 点粒子和方形粒子系统,都继承了CCParticleSystem的所有属性 CCParticleExplosion 爆炸粒子效果 CCParticleFireworks 烟花粒子效果 CCParticleFire 火焰粒子效果 CCParticleMetepr 流行粒子效果 CCParticleSpira

cocos基础教程(8)粒子效果

简介 粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象.物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸.烟花.水流)提供了方便. 粒子属性 一个强大的粒子系统它必然具备了多种多样的属性,这样才能配置出多样的粒子.下面就来看看粒子系统的主要属性吧. 主要属性: _duration 发射器生存时间,即它可以发射粒子的时间,注意这个时间和粒子生存时间不同.单位秒,-1表示永远:粒子发射结束后可点击工具栏的播放按钮再次发射 _emissionRa

关于Unity中粒子效果的使用

粒子效果1: 游戏中会有很炫酷的特效,比如爆炸,水花,火焰等;2: unity提供粒子编辑器,方便特效人员来开发很炫酷的特效;3.粒子效果一般有专门的粒子特效师来做,我们只需要拿来用就好了,很多参数没必要掌握. Particle System组件面板 1: 粒子系统主体;2: 喷射(Emission);3: 形态(shape);4: 生命周期内的速度偏移(velocity over lifetime);5: 生命周期内的限制速度(limit velocity over lifetime);6:

IOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // rect:裁剪图片的尺寸,传递是像素 CGImageRef norImage = CGImageCreateWithImageInRect(norBigImage.CGImage, clipRect); 2.每次点击按钮立马变为选中状态,并且取消上次的按钮的选中状态 当然还要重写- (void)setH

libgdx 2D 粒子效果二

在上一篇随笔中,我们能够把粒子效果在stage中使用了. 想了想,在实际应用中粒子效果可能有2中使用的情况: 1. 单独的粒子效果,比如一个飞行的火球.他跟真正的Actor没啥关系,只有自己的position或者说飞行轨迹. 施法者放完后爱哪玩去哪玩去,粒子效果跟他无关了. 2. 跟真正的Actor相关的粒子效果,比如飞机发动机的火焰,或者飞机爆炸的效果. 他一直跟着飞机在动. -------------------当然以上两种未必用粒子效果实现,我只是这么说... 对于第二种情况,不防封装一个

超炫的粒子效果!代码,就应该这么写!

最近瞎逛的时候发现了一个超炫的粒子进度效果,有多炫呢?请擦亮眼镜! 粗略一看真的被惊艳到了,而且很实用啊有木有!这是 Jack Rugile 写的一个小效果,源码当然是有的.聪慧如你,肯定觉得这个东西so easy 要看啥源码,给我3分钟我就写出来了吧.所以你的思路可能是: 1)进度条的实现没什么好说的,简单的一个 fillRect(0,0,long,20),long和20是分别进度条的长宽.然后每帧动画调用前将画布清除clearRect(0,0,canvas.width,canvas.heig