码迷,mamicode.com
首页 > 其他好文 > 详细

Cocos2d-x中自定义粒子系统

时间:2014-09-15 10:06:58      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:cocos2d-x   swift   开发人员   string   

除了使用Cocos2d-x11种内置粒子系统外,我们还可以通过创建ParticleSystemQuad对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统。使用ParticleSystemQuad自定义粒子系统至少有两种方式可以实现:代码创建和plist文件创建。

代码创建

所谓代码创建就是完全通过代码方式实现,其中所有的属性全部是通过程序代码设置。这要求开发人员对于这些属性值非常熟悉,而且这种方式无法预览,只能通过程序运行看效果,调整,再运行看效果,再调整,因此比较麻烦。

要想实现如下图所示的下雪粒子系统,我们当然可以通过前面介绍的方式实现,但本节我们先介绍通过自定义粒子系统实现。

 bubuko.com,布布扣

代码创建的下雪粒子系统,主要代码如下:

bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
 
Size visibleSize = Director::getInstance()->getVisibleSize();
 
auto bg = Sprite::create("background-1.png");
 
bg->setPosition(Point(visibleSize.width/2, visibleSize.height /2));
this->addChild(bg);
 
auto particleSystem = ParticleSystemQuad::createWithTotalParticles(200);	①
 
//设置雪花粒子纹理图片
particleSystem->setTexture(TextureCache::getInstance()->addImage("snow.png"));	②
//设置发射粒子的持续时间-1表示永远持续
particleSystem->setDuration(-1);
//设置粒子的重力方向 
particleSystem->setGravity(Point(0,-240));
 
//设置角度以及偏差
particleSystem->setAngle(90); 
particleSystem->setAngleVar(360);
 
//设置径向加速度以及偏差
particleSystem->setRadialAccel(50);
particleSystem->setRadialAccelVar(0);
 
//设置粒子的切向加速度以及偏差
particleSystem->setTangentialAccel(30);
particleSystem->setTangentialAccelVar(0);
 
// 设置粒子初始化位置偏差
particleSystem->setPosVar(Point(400,0));
 
//设置粒子生命期以及偏差
particleSystem->setLife(4);
particleSystem->setLifeVar(2);
 
//设置粒子开始时候旋转角度以及偏差
particleSystem->setStartSpin(30);
particleSystem->setStartSpinVar(60);
 
//设置结束时候的旋转角度以及偏差
particleSystem->setEndSpin(60);
particleSystem->setEndSpinVar(60);
 
//设置开始时候的颜色以及偏差
particleSystem->setStartColor(Color4F(1,1,1,1));
//设置结束时候的颜色以及偏差
particleSystem->setEndColor(Color4F(1,1,1,1));
 
//设置开始时候粒子大小以及偏差
particleSystem->setStartSize(30);
particleSystem->setStartSizeVar(0);
 
//设置粒子结束时候大小以及偏差
particleSystem->setEndSize(20.0f);
particleSystem->setEndSizeVar(0);
 
//设置每秒钟产生粒子的数量
particleSystem->setEmissionRate(100);
 
particleSystem->setPosition(Point(visibleSize.width/2, visibleSize.height + 50));
 
this->addChild(particleSystem);
 
 	return true;
}

上述第①行代码ParticleSystemQuad::createWithTotalParticles(200)是创建ParticleSystemQuad对象,静态createWithTotalParticles函数是通过指定初始粒子数来创建粒子对象。

第②行代码是指定粒子的纹理,TextureCache::getInstance()->addImage("snow.png")语句可以通过指定的纹理图片创建纹理对象Texture2D贴图的纹理图片宽高必须是2的n次幂,大小不要超过64x64像素,在美工设计纹理图片时候,不用关注太多细节,例如:设计雪花纹理图片时候,按照雪花是有6个角的,很多人会设计为图10-7所示的样式,而事实上我们需要的图10-8所示的渐变效果的圆点

bubuko.com,布布扣

雪花图片 

 bubuko.com,布布扣

雪花粒子纹理图片

 

plist文件创建

代码创建方式要维护很多属性,要想手工调整这些属性那是非常困难的事情,我们推荐使用Particle Designer等粒子设计工具进行所见即所得的设计,这些工具一般会生成一个描述粒子的属性类表文件plist,然后通过类似下面的语句加载:

auto particleSystem =ParticleSystemQuad::create("snow.plist");

snow.plist是描述运动的属性文件,plist文件是一种XML文件,参考代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>angle</key>
<real>270</real>
<key>angleVariance</key>
<real>5</real>
<key>blendFuncDestination</key>
<integer>771</integer>
<key>blendFuncSource</key>
<integer>1</integer>
<key>duration</key>
<real>-1</real>
<key>emitterType</key>
<real>0.0</real>
<key>finishColorAlpha</key>
<real>1</real>
<key>finishColorBlue</key>
<real>1</real>
<key>finishColorGreen</key>
<real>1</real>
<key>finishColorRed</key>
<real>1</real>
<key>finishColorVarianceAlpha</key>
<real>0.0</real>
<key>finishColorVarianceBlue</key>
<real>0.0</real>
<key>finishColorVarianceGreen</key>
<real>0.0</real>
<key>finishColorVarianceRed</key>
<real>0.0</real>
<key>finishParticleSize</key>
<real>-1</real>
<key>finishParticleSizeVariance</key>
<real>0.0</real>
<key>gravityx</key>
<real>0.0</real>
<key>gravityy</key>
<real>-10</real>
<key>maxParticles</key>
<real>700</real>
<key>maxRadius</key>
<real>0.0</real>
<key>maxRadiusVariance</key>
<real>0.0</real>
<key>minRadius</key>
<real>0.0</real>
<key>minRadiusVariance</key>
<real>0.0</real>
<key>particleLifespan</key>
<real>3</real>
<key>particleLifespanVariance</key>
<real>1</real>
<key>radialAccelVariance</key>
<real>0.0</real>
<key>radialAcceleration</key>
<real>1</real>
<key>rotatePerSecond</key>
<real>0.0</real>
<key>rotatePerSecondVariance</key>
<real>0.0</real>
<key>rotationEnd</key>
<real>0.0</real>
<key>rotationEndVariance</key>
<real>0.0</real>
<key>rotationStart</key>
<real>0.0</real>
<key>rotationStartVariance</key>
<real>0.0</real>
<key>sourcePositionVariancex</key>
<real>1200</real>
<key>sourcePositionVariancey</key>
<real>0.0</real>
<key>speed</key>
<real>130</real>
<key>speedVariance</key>
<real>30</real>
<key>startColorAlpha</key>
<real>1</real>
<key>startColorBlue</key>
<real>1</real>
<key>startColorGreen</key>
<real>1</real>
<key>startColorRed</key>
<real>1</real>
<key>startColorVarianceAlpha</key>
<real>0.0</real>
<key>startColorVarianceBlue</key>
<real>0.0</real>
<key>startColorVarianceGreen</key>
<real>0.0</real>
<key>startColorVarianceRed</key>
<real>0.0</real>
<key>startParticleSize</key>
<real>10</real>
<key>startParticleSizeVariance</key>
<real>5</real>
<key>tangentialAccelVariance</key>
<real>0.0</real>
<key>tangentialAcceleration</key>
<real>1</real>
<key>textureFileName</key>
<string>snow.png</string>
</dict>
</plist>

在上述的plist文件描述的属性和属性值都是成对出现,其中<key>标签描述的是属性,<real>描述的属性值。plist文件是描述粒子的属性,使用的时候还需要有粒子纹理图片,plist文件中textureFileName属性指定了纹理图片,我们需要将plist文件和纹理图片放置到Resources目录下面。

提示 描述粒子属性的plist文件,可以通过粒子系统设计工具生成,有关粒子系统工具使用大家可以参考我的TODO

 

如图所示的下雪实例,使用plist文件创建,主要代码如下:

bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
 
Size visibleSize = Director::getInstance()->getVisibleSize();
 
auto bg = Sprite::create("background-1.png");
bg->setPosition(Point(visibleSize.width/2, visibleSize.height /2));
this->addChild(bg);
 
auto particleSystem = ParticleSystemQuad::create("snow.plist");
    particleSystem->setPosition(Point(visibleSize.width/2, visibleSize.height - 50));
this->addChild(particleSystem);
return true;
}

从代码可见plist文件创建粒子系统要比代码创建简单很多,这主要是因为采用了plist描述粒子属性。




更多内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论网站:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台

bubuko.com,布布扣

 

Cocos2d-x中自定义粒子系统

标签:cocos2d-x   swift   开发人员   string   

原文地址:http://blog.csdn.net/tonny_guan/article/details/39288481

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!