一、粒子系统简介:

粒子系统最早出现在80年代,主要用于解决由大量按一定规则运动(变化)的微小物质在计算机上的生成和显示问题。Particle System的应用非常广泛,大的可以模拟原子弹爆炸,星云变化,小的可以模拟水波、火焰、烟火、云雾等,而这些自然现象用常规的图形算法是很难逼真再现的。
Particle System可以说是一种基于物理模型来解决问题的方法,它的核心不在于如何显示,而在用于对微小物质模型的规则提取。
粒子运动(变化)的规则可以很简单也可以很复杂,这取决你所模拟的对象。举例来说,在对FireWorks(烟火)的模拟中,我们可以让烟火由上百个小的粒子组成,每个粒子都具有以下一些属性及其规则(对各个属性施加不同的规则,就可以获得不同形态的烟火):
 
Coordinate(坐标)
在烟火爆炸的时刻,每个粒子都有一个相同的初始坐标,随着时间的推移,粒子的新坐标将由它的旧坐标和加速度来求得
Velocity(速度)
每个粒子都有一个随机产生的初始速度,粒子的新速度由加速度和空气阻尼来求得
Acceleration(加速度)
在烟火中,每个粒子的加速度都等于重力加速度
Color(颜色)
粒子颜色取决于粒子的速度或生命值的大小
Life(生命值)
每个粒子都有一个初始的随机生命值,这个值将随着时间的推移而逐渐减小,直到等于0
 
你会发现,Particle System中的粒子与C++中类的概念有些类似,实际上你完全可以将它当成类来处理,一个粒子就是一个类的实例对象,只不过有时在涉及程序优化的具体细节上,你需要放弃使用类,而使用简单而快速的紧凑代码。
 
Particle System虽然在处理大量单独粒子的运动(变化)上很有用处,但是一涉及到需要考虑粒子间相互作用的场合,因为这时的计算量呈粒子数量的指数级增长,它就显得有些力不从心了。比如在模拟有相互引力作用下的大量星体的运动,大量粒子的相互碰撞等。
 
二、粒子系统的生命周期

首先,从粒子池中获取一个粒子,
然后计算赋予初始属性后,发射他。
在粒子飞行过程中,不断的刷新来修正他的属性。
粒子死亡后,回归粒子池。
 
 三、例子相关属性
Variance 浮动值:表示随机上下浮动的修正值,实际值由原始值+浮动值组成,例如Lifespan=5,Lifespan Variance=1 那么随机出来的结果就是4~6
 
四、发射器相关属性
发射器有两种,一种是重力发射器(用于实现在重力条件下的粒子运动),另一种是放射发射器(用于实现在无重力下的粒子运动)。
 
 
五、纹理Texture
如果没有贴图的话,所有粒子将会是单调的色块。粒子的贴图没有具体限制,可以是灰度图,也可以是一张具体的图片。但要小于64x64pixel
六、cocos2d-x实现Particle System
第一种方法:
 
 CCParticleSystem* m_emitter;
 m_emitter = CCParticleFireworks::node();
 m_emitter->retain();
 this->addChild(m_emitter, 10);
 m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage(“image.png”) );
 m_emitter->setPosition(ccp(489,320));
 
第二种方法:
CCParticleSystem* m_emitter;
m_emitter = new CCParticleSystemQuad();
 m_emitter->initWithTotalParticles(50);
 this->addChild(m_emitter, 10);
 m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage(s_stars1) );
 m_emitter->setDuration(-1);
   
   // gravity
 m_emitter->setGravity(CCPointZero);
   
   // angle
 m_emitter->setAngle(90);
 m_emitter->setAngleVar(360);
   
   // speed of particles
 m_emitter->setSpeed(160);
 m_emitter->setSpeedVar(20);
   
   // radial
 m_emitter->setRadialAccel(-120);
 m_emitter->setRadialAccelVar(0);
   
   // tagential
 m_emitter->setTangentialAccel(30);
 m_emitter->setTangentialAccelVar(0);
   
   // emitter position
 m_emitter->setPosition( CCPointMake(160,240) );
 m_emitter->setPosVar(CCPointZero);
   
   // life of particles
 m_emitter->setLife(4);
 m_emitter->setLifeVar(1);
   
   // spin of particles
 m_emitter->setStartSpin(0);
 m_emitter->setStartSizeVar(0);
 m_emitter->setEndSpin(0);
 m_emitter->setEndSpinVar(0);
   
   // color of particles
 ccColor4F startColor = {0.5f, 0.5f, 0.5f, 1.0f};
 m_emitter->setStartColor(startColor);
   
 ccColor4F startColorVar = {0.5f, 0.5f, 0.5f, 1.0f};
 m_emitter->setStartColorVar(startColorVar);
   
 ccColor4F endColor = {0.1f, 0.1f, 0.1f, 0.2f};
 m_emitter->setEndColor(endColor);
   
 ccColor4F endColorVar = {0.1f, 0.1f, 0.1f, 0.2f}; 
 m_emitter->setEndColorVar(endColorVar);
   
   // size, in pixels
 m_emitter->setStartSize(80.0f);
 m_emitter->setStartSizeVar(40.0f);
 m_emitter->setEndSize(kParticleStartSizeEqualToEndSize);
   
   // emits per second
 m_emitter->setEmissionRate(m_emitter->getTotalParticles()/m_emitter->getLife());
   
   // additive
 m_emitter->setIsBlendAdditive(true);
 
第三种方法:
  CCParticleSystemQuad *system = new CCParticleSystemQuad();
  system->initWithFile("Images/SpinningPeas.plist");//plist文件可以通过例子编辑器获得
  system->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("Images/particles.png")
       ,      CCRectMake(0,0,32,32));
  addChild(system, 10);
system->setPosition 
 
 
 

cocos2d-x Tests讲解 Particle System(粒子系统)的更多相关文章

  1. Particle System(粒子系统)

    粒子系统应用:Unity的粒子系统可以制作烟雾,气流,火焰和各种大气效果.   粒子系统模块介绍:         大部分的属性可以通过曲线控制(见曲线编辑器),颜色属性可以被定义了颜色动画的渐变器控 ...

  2. cocos2d-x:Particle System(粒子系统)

    一.粒子系统简介: 粒子系统最早出现在80年代,主要用于解决由大量按一定规则运动(变化)的微小物质在计算机上的生成和显示问题.Particle System的应用非常广泛,大的可以模拟原子弹爆炸,星云 ...

  3. 粒子系统模块(Particle System Modules40)

    粒子系统模块(Particle System Modules40) 粒子系统模块(忍者飞镖) 粒子系统(忍者飞镖)(Particle System (Shuriken)) 用模块描述粒子一段时间内的行 ...

  4. Unity3D学习笔记——组件之Effects(效果/特效)——Particle System(粒子系统)

    Effects:效果/特效. Particle System:粒子系统.可用于创建烟雾.气流.火焰.涟漪等效果. 在Unity3D 3.5版本之后退出了新的shuriken粒子系统:   添加组件之后 ...

  5. Unity3D:粒子系统Particle System

    1. GameObject → Create Other  →  Particle System. 2. 选中 Particle System,可看到下列屬性: 3.Particle System: ...

  6. Cesium中级教程9 - Advanced Particle System Effects 高级粒子系统效应

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 要了解粒子系统的基础知识,请参见粒子系统入门教程. Weathe ...

  7. Cesium中级教程8 - Introduction to Particle Systems 粒子系统入门

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ What is a particle system? 什么是粒子 ...

  8. [原]Unity3D深入浅出 - 粒子系统(Particle System)

    粒子系统是在三维空间渲染出来的二维图像,主要用于烟,火,水滴,落叶等效果.一个粒子系统由粒子发射器.粒子动画器和粒子渲染器三个独立的部分组成. Unity中自带了一些粒子效果,在Assets>I ...

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

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

随机推荐

  1. java中最简单的方式新起一个线程

    启动一个线程在一个方法中启动一个线程,有两种方法第一种是让类实现Runable接口,这样的话编译器就会提示你实现里面的未实现的方法(就是run方法)第二种是,现在方法中new一个线程,然后直接调用他的 ...

  2. Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解

    对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法.看看各位童鞋在平时的工作中否都用到了Al ...

  3. Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例

    1. 复制指定目录下指定后缀名的文件并修改名称的案例     需求:复制指定目录下的指定文件,并修改后缀名.  • 指定的文件是:.java文件.     • 指定的后缀名是:.jad     • 指 ...

  4. DW一些快捷键的使用

    在键盘上敲空格的话可以使用shift+空格 如果要换行的话就可以使用的是 shift+enter

  5. 在Android应用程序使用YouTube API来嵌入视频

    在Android版YouTube播放器API使您可以将视频播放功能到你的Android应用程序.该API允许您加载和播放YouTube视频(和播放列表),并自定义和控制视频播放体验. 您可以加载或暗示 ...

  6. 在AngularJS的controller外部直接获取$scope

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/5560843.html ...

  7. 读取group by 之外的字段

    序号 姓名 性别 身高 1 张三 男  185 2 李四 女  161 3 王五 女  166 4 赵六 男  178 1.获取男生女生人数 select count(性别) , 性别 from 表名 ...

  8. ThinkPHP函数详解:F方法

    我们已经了解了ThinkPHP中的S方法的用法,F方法其实是S方法的一个子集功能,仅用于简单数据缓存,并且只能支持文件形式,不支持缓存有效期,因为采用的是PHP返回方式,所以其效率较S方法较高,因此我 ...

  9. UpdateProgress使用

    UpdateProgress是一个进度显示条,加在AJAX里能显得更加的人性化(个人认为).现在我们就开始吧: 第一.新建一个AJAX项目.在页面上加上ScriptManager,UpdatePane ...

  10. 那天有个小孩跟我说LINQ(六)转载

    2  LINQ TO SQL完结(代码下载)      我们还是接着上次那个简单的销售的业务数据库为例子,打开上次那个例子linq_Ch5 2.1 当数据库中的表建立了主外键 ①根据主键获取子表信息 ...