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

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).粒子的纹理

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

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

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在游戏App中为了衬托气氛我们往往使用一些特殊的图形效果,粒子 ...

  2. cocos2d粒子效果

    第9章 粒子效果 游戏开发者通常使用粒子系统来制作视觉特效.粒子系统能够发射大量细小的粒子并对他们进行渲染,而且效率要远高于渲染同样数目的精灵.粒子系统可以模拟下雨.火焰.雪.爆炸.蒸气拖尾以及其他多 ...

  3. cocos2d 粒子效果以及Particle Designer粒子工具的学习

    最近在学习cocos2d中的粒子效果吧,下面就把学到的和大家分享下吧! Now!我们先了解下类结构吧 -- CCParticleSystem(所有粒子系统的父类) -- CCParticleSyste ...

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

     1 粒子 演示样例 2 类图关系 3 系统原生粒子 CCParticleSystem 全部粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad ...

  5. 超炫的HTML5粒子效果进度条 VS 如何规范而优雅地code

    最近瞎逛的时候发现了一个超炫的粒子进度效果,有多炫呢?请擦亮眼镜!   // _this.ch){ _this.particles.splice(i, 1); } }; this.Particle.p ...

  6. 简直要逆天!超炫的 HTML5 粒子效果进度条

    我喜欢粒子效果作品,特别是那些能够应用于实际的,例如这个由 Jack Rugile 基于 HTML5 Cavnas 编写的进度条效果.看着这么炫的 Loading 效果,即使让我多等一会也无妨:)你呢 ...

  7. CodePen 作品秀:Canvas 粒子效果文本动画

    作品名称——Shape Shifter,基于 Canvas 的粒子图形变换实验.在页面下方的输入框输入文本,上面就会进行变换出对应的粒子效果文本动画. CodePen 作品秀系列向大家展示来自 Cod ...

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

    一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...

  9. 能产生粒子效果的CAEmitterLayer

    能产生粒子效果的CAEmitterLayer 下雪效果: // // RootViewController.m // Cell // // Copyright (c) 2014年 Y.X. All r ...

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

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

随机推荐

  1. Vue基础知识点

    基础知识: vue的生命周期: beforeCreate/created.beforeMount/mounted.beforeUpdate/updated.beforeDestory/destorye ...

  2. ORA-01795: 列表中的最大表达式数为 1000

    系统报出一SQL异常,内容如下: java.sql.SQLException: ORA-01795: maximum number of expressions in a list is 1000 找 ...

  3. JavaWeb初学者session的使用

    使用request对象的getSession()获取session,如果session不存在则创建一个 HttpSession session = request.getSession();将数据存储 ...

  4. Ubuntu系统的Redis安装配置

    Ubuntu系统的Redis安装配置 一.      安装Redis: 在Ubuntu系统下安装Redis数据库有两种方式: 方式一:下载最新的Redis版本(tar.gz格式),解压安装.操作如下: ...

  5. volatile 和 mutable 关键字

    经常接触,但是过一段时间可能又忘了.做个记录. volatile是表示变量易变,不要放缓存,每次实际取,尤其是多线程. mutable表示一个const 类或者数据结构里面,某个字段是可以改变的.

  6. HDU 4175 Class Schedule (暴力+一点dp)

    pid=4175">HDU 4175 题意:有C座楼,每座楼有T个教室.一个人须要訪问C个教室.每座楼仅仅能訪问一个教室. 訪问教室须要消耗能量,从x点走到y点须要消耗abs(x-y) ...

  7. iOS对象方法和类方法的区别与调用方式

    作为一个iOS程序员初学者,会搞不清楚对象方法和类方法的区别 -(void)duixiangfangfa ; +(void)leifangfa; - 代表实例方法,它在类的一个具体实例范围内执行,也就 ...

  8. MyLayer MyScene

    //MyLayer.h #include "cocos2d.h" USING_NS_CC; class MyLayer : public CCLayer { public: sta ...

  9. 基于Zepto移动端下拉加载(刷新),上拉加载插件开发

    写在前面:本人水平有限,有什么分析不到位的还请各路大神指出,谢谢. 这次要写的东西是类似于<今日头条>的效果,下拉加载上啦加载,这次做的效果是简单的模拟,没有多少内容,下面是今日头条的移动 ...

  10. jqGrid收藏的链接

    http://zld406504302.iteye.com/blog/1694017 http://blog.csdn.net/jiudihanbing/article/details/2455902 ...