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

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. ASP.net session丢失

    ASP.NET Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做 ...

  2. ECMAScript 6新特性之Proxy

    ECMAScript 6中新增了一个全局构造函数:Proxy.该构造函数能够接收两个參数:一个目标对象.一个处理对象. 代码演示样例: var target = {}; var handler = { ...

  3. Android学习JNI,使用JNI实现字符串加密

    本节学习使用C语言加密字符串,大家都知道使用JAVA实现的加密都能够反编译的,而使用C写的加密是非常难被反编译的.所以我们使用JNI学习怎样使用C实现对字符串的加密. 首先:我们实现一个界面 布局文件 ...

  4. Hibernate中session回话的get方法和load方法的区别

    1.报错方式不同: 前提:获取的数据不存在 get方法会报异常:空指针异常 load方法会报异常:对象为找到异常,给定值没有行存在. 2.load方法 这种方式总是会返回一个代理而不是真正得去查询数据 ...

  5. [jzoj 6086] [GDOI2019模拟2019.3.26] 动态半平面交 解题报告 (set+线段树)

    题目链接: https://jzoj.net/senior/#main/show/6086 题目: 题解: 一群数字的最小公倍数就是对它们质因数集合中的每个质因数的指数取$max$然后相乘 这样的子树 ...

  6. 133.throw机制 抛出类类型

    #include <iostream> using namespace std; //try尝试执行,抛出throw,throw之后语句不再执行 //catch处理throw的异常 voi ...

  7. URAL 1297 后缀数组+线段树

    思路: 论文题--*n 倒过来接上 分奇偶讨论 求LCP 搞棵线段树即可 //By SiriusRen #include <cstdio> #include <cstring> ...

  8. hbase的优化(全)

    高可用 在HBase中Hmaster负责监控RegionServer的生命周期,均衡RegionServer的负载,如果Hmaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状 ...

  9. 获取xml字符串中的属性值

    pagexml = @"<?xml version='1.0' encoding='utf-8'?> <DATAPACKET Version='2.0'> <M ...

  10. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)

    最小生成树: 生成树的定义:给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树.(Spanning Tree) 最小生成树的定义:在生成树的基础上,如果边上有 ...