在游戏中,经常要实现一些真实的效果,这些效果(如,火焰,雪花等)都是由大量微粒组合而形成的。为了在游戏中实现这种效果,我们必须引进粒子系统,粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子状态。大量的粒子叠加就可以产生我们需要的特效。

在cocos2d-x引擎中,粒子系统使用CCParticleSystem来表示,又分为两大类,重力式粒子系统CCParticleSystemPoint和放射式粒子系统CCParticleSystemQuad,两者在功能上略有不同,CCParticleSystemQuad支持围绕轴线旋转,CCParticleSystemQuad支持更多粒子对象和缩放,重力式故名思义,系统中存在重力,重力大小可以自己定义,包括的参数有:重心,速度,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,角加速度,线加速度,半径,分组模式(是否随重心移动),放射性系统恰恰相反,不存在重力,包括的参数有:重心,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,绕重心为轴心旋转角度,半径,分组模式(是否随重心移动)。

那么下面是每个粒子都具有以下一些属性及其规则:

1.Coordinate(坐标)
在烟火爆炸的时刻,每个粒子都有一个相同的初始坐标,随着时间的推移,粒子的新坐标将由它的旧坐标和加速度来求得
2.Velocity(速度)
每个粒子都有一个随机产生的初始速度,粒子的新速度由加速度和空气阻尼来求得
3.Acceleration(加速度)
在烟火中,每个粒子的加速度都等于重力加速度
4.Color(颜色)
粒子颜色取决于粒子的速度或生命值的大小
5.Life(生命值)
每个粒子都有一个初始的随机生命值,这个值将随着时间的推移而逐渐减小,直到等于0
 
    那么实现粒子效果有3中方式:
1.自定义实现效果
2.使用Cocos2d-x内置的粒子效果去实现
3.通过plist文件创建
 
示例代码:
//在init方法里面初始化当前的实例
bool HelloWorld::init()
{
bool bRet = false;
do
{
//CCLayer进行初始化,初始化失败跳出循环
if ( !CCLayer::init() )
{
break;
}
//获取手机屏幕的大小
CCSize size = CCDirector::sharedDirector()->getWinSize();
//1自定义实现
//建立一个粒子系统
CCParticleSystem* pParticleSystem=new CCParticleSystemQuad();
//产生300个粒子
pParticleSystem->initWithTotalParticles();
//设置粒子图片
pParticleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("cat.png"));
//设置粒子系统持续时间
pParticleSystem->setDuration(-);
//设置重力方向
pParticleSystem->setGravity(CCPointZero);
//设置角度,角度变化率
pParticleSystem->setAngle();
pParticleSystem->setAngleVar();
//设置运动速度,运动速度的变化率
pParticleSystem->setSpeed();
pParticleSystem->setSpeedVar();
//设置径向加速度,径向加速度的变化率
pParticleSystem->setRadialAccel();
pParticleSystem->setRadialAccelVar();
//设置切向加速度,径向加速度的变化率
pParticleSystem->setTangentialAccel();
pParticleSystem->setTangentialAccelVar();
//设置粒子初始位置,位置变化率
pParticleSystem->setPosition(size.width/,size.height/);
pParticleSystem->setPosVar(ccp(,));
//设置粒子存在时间,时间变化率
pParticleSystem->setLife();
pParticleSystem->setLifeVar(0.3);
//设置粒子初始颜色,颜色变化率
ccColor4F cccStart={0.5,0.5,0.5,1.0};
pParticleSystem->setStartColor(cccStart);
pParticleSystem->setStartColorVar(cccStart);
//设置粒子结束颜色,颜色变化率
ccColor4F cccEnd={0.5,0.5,0.5,1.0};
pParticleSystem->setStartColor(cccEnd);
pParticleSystem->setStartColorVar(cccEnd);
//设置粒子初始大小,大小变化率
pParticleSystem->setStartSize();
pParticleSystem->setStartSizeVar();
//设置粒子结束大小,大小变化率
pParticleSystem->setStartSize();
pParticleSystem->setStartSizeVar();
//设置每秒产生粒子数
pParticleSystem->setEmissionRate(pParticleSystem->getTotalParticles()/pParticleSystem->getLife()); this->addChild(pParticleSystem,); //2使用系统自带的 CCParticleSystem* m_emitter;
//烟花粒子效果
m_emitter = CCParticleFireworks::create();
m_emitter->retain();
this->addChild(m_emitter, );
m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage("cat.png") );
m_emitter->setPosition(ccp(,));
/* -- CCParticleSystem(所有粒子系统的父类)
-- CCParticleSystemPoint、CCParticleSystemQuad 点粒子和方形粒子系统
-- CCParticleExplosion (爆炸粒子效果)
-- CCParticleFireworks (烟花粒子效果)
-- CCParticleFire (火焰粒子效果)
-- CCParticleFlower (花束粒子效果)
-- CCParticleGalaxy (星系粒子效果)
-- CCParticleMeteor (流星粒子效果)
-- CCParticleSpiral (漩涡粒子效果)
-- CCParticleSnow (雪粒子效果)
-- CCParticleSmoke (烟粒子效果)
-- CCParticleSun (太阳粒子效果)
-- CCParticleRain (雨粒子效果) */ //第三种方法通过plist文件创建
CCParticleSystemQuad *system = new CCParticleSystemQuad();
system->initWithFile("Images/SpinningPeas.plist");//plist文件可以通过例子编辑器获得
system->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("cat.png")
, CCRectMake(,,,));
addChild(system, );
system->setPosition(ccp(,)); //接收界面的的触摸事件
setTouchEnabled(true); bRet = true;
} while ();
//返回成功
return bRet;
}

运行的效果:

 

[Cocos2d-x For WP8]Particle粒子系统的更多相关文章

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

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

  2. Cocos2d-x游戏移植到WP8之路 -- c++和c#交互

    Cocos2d-x是眼下最流行的手机游戏引擎之中的一个,开源.轻量.多平台等的诸多特性使得它被非常多国内外手游开发人员所喜爱. 利用Cocos2d-x来开发Windows Phone 8的游戏相同也是 ...

  3. Cocos2d粒子系统二

    粒子系统的属性: 粒子的发射速度 重力模式(模式A): 重力 方向 速度 +- 变动 切向加速度 +- 变动 径向加速度 +- 变动 半径模式(模式B): 开始半径 +- 变动 结束半径 +- 变动 ...

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

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

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

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

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

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

  7. cocos2d-x Tests讲解 Particle System(粒子系统)

    转载请注明出处: http://www.cnblogs.com/shangdahao/archive/2012/04/14/2447571.html 一.粒子系统简介: 粒子系统最早出现在80年代,主 ...

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

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

  9. Unity3D:粒子系统Particle System

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

随机推荐

  1. 黑客讲述渗透Hacking Team全过程(详细解说)

    近期,黑客Phineas Fisher在pastebin.com上讲述了入侵Hacking Team的过程,以下为其讲述的原文情况,文中附带有相关文档.工具及网站的链接,请在安全环境下进行打开,并合理 ...

  2. django动态表格总结

    应用场景: A与B之间存在一对多关系. CBV实现方案: CreateView/UpdateView + inlineformset + jquery 具体: view方面:重写post/get方法, ...

  3. ZJOI Day 2 游记

    ---恢复内容开始--- 去ZJOI Day 2打了一会酱油...各种神犇大爷都来屠,南外的小朋友也来屠我们了真是感动...没有看到毛爷爷真是可惜.. Day[-1] 早上还在上课,吃完中饭立马跑去找 ...

  4. PHP很有用的一个函数ignore_user_abort ()

    PHP很有用的一个函数ignore_user_abort () 2013-01-16 14:21:31|  分类: PHP |  标签:php  函数  |举报|字号 订阅     ignore_us ...

  5. 使用pymongo需要手动关闭MongoDB Connection吗?

    答:Disconnecting will close all underlying sockets in the connection pool. If this instance is used a ...

  6. Timer1控件的属性

  7. 37.寻找丑数[Ugly numbers]

    [题目] 我们把只包含质因子2.3和5的数称作丑数(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑 ...

  8. Java web项目的字符集问题

    如果在Windows系统下使用eclipse开发Java应用,那么开始的时候我们一般不会考虑编码问题,但是随着不断学习,接触到前端.服务端.数据接口.数据库等更多的组件时,编码问题就逐渐暴露出来了,我 ...

  9. Android之XML序列化和解析

    XML文件是一种常用的文件格式,可以用来存储与传递数据 ,本文是XML文件序列化与解析的一个简单示例 写文件到本地,并用XML格式存储 /** * 写xml文件到本地 */ private void ...

  10. Linux命令--文件管理

    1.ls ls -a 列出目录下是所有文件 ls -l 列出文件的详细信息   2.cd cd /root 进入更目录下的root文件夹 cd file 进入当前目录的file文件夹 cd .. 进入 ...