Cocos2d-x中自定义粒子系统

除了使用Cocos2d-x的11种内置粒子系统外我们还可以通过创建ParticleSystemQuad对象并设置属性实现自定义粒子系统通过这种方式完全可以实现我们说需要的各种效果的粒子系统。使用ParticleSystemQuad自定义粒子系统至少有两种方式可以实现代码创建和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::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所示的渐变效果的圆点。

雪花图片 

 

雪花粒子纹理图片

 

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描述粒子属性。

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》‍

本书交流讨论网站http://www.cocoagame.net

更多精彩视频课程请关注智捷课堂Cocos课程http://v.51work6.com

欢迎加入Cocos2d-x技术讨论群257760386

《Cocos2d-x实战 C++卷》现已上线各大商店均已开售‍

京东http://item.jd.com/11584534.html

亚马逊http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当http://product.dangdang.com/23606265.html

互动出版网http://product.china-pub.com/3770734

《Cocos2d-x实战 C++卷》源码及样章下载地址

源码下载地址http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

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

时间: 2024-09-30 15:52:18

Cocos2d-x中自定义粒子系统的相关文章

Cocos2d-JS自定义粒子系统

除了使用Cocos2d-JS的11种内置粒子系统外,我们还可以通过创建ParticleSystem对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统.使用ParticleSystem自定义粒子系统至少有两种方式可以实现:代码创建和plist文件创建.代码创建粒子系统需要手工设置这些属性,维护起来非常困难,我们推荐使用Particle Designer等粒子设计工具进行所见即所得的设计,这些工具一般会生成一个描述粒子的属性类表文件plist,然后通过类似下面

android-expandablelistview中自定义的child无法点击

问题描述 expandablelistview中自定义的child无法点击 写了一个自定义的expandablelistviewgroup设置监听事件,能被点击child setOnChildClickListener()无反应 什么原因??? 下面是适配器中getchildView()的函数试了一下 把return换成title(title是自定义布局中的一个textview) 可以进行点击怎么回事???? public View getChildView(int groupPosition

在MonoTouch中自定义表格

为什么要定制表格? 表格在很多iPhone应用程序中都是必需的UI元素.虽然对于应用程序开发而言,这并非是一项新发明,鉴于设备尺寸等方面的限制,表格在iPhone中的功能是非常固定的. 苹果在其SDK中,直接内置了很多风格来让你定制表格.不过,在你最初创建表格的时候,它看起来非常简单.在没有进行任何定制的时候,你可以为表格选择两种基本风格,默认风格和分组风格: 在对表格中的单元格进行一点调整后,你就可以添加图标和说明文字: 你甚至能改变单元格的字体和颜色,然而,有时候这样还是不足够.如果你真的想

在WPF中自定义你的绘制(一)

在传统的Windows窗体编程中,如果我们需要打造一些比较个性化的控件,那么我们常常需要自定义控件的绘制(重写OnPaint等),即需要经常用到Graphics对象.而在WPF中,我们可以使用Xaml轻松编写出很有特色的界面元素,似乎与以前的以前利用Graphics对象手写代码绘制控件的日子越来越远了.其实在WPF中,如果我们需要低级别的自定义绘制同样是可以的,那么我们就需要一个名DrawingContext的类.与OnPaint方法相对应的是OnRender方法(当然,你也可以在其他地方进行绘

Windows XP中自定义纸型

在Windows 98操作系统中,打印机属性里的纸张选择里有"自定义"一项,比较直观,可以很方便的自定义打印机纸张大小:而Windows XP中"自定义"的位置是不同于Windows 98的,不熟悉的用户很难找到.下面就是在Windows XP中自定义纸型的方法. 创建新格式 以下我们以一个实例说明Windows XP中自定义纸张的具体过程.例如,要定义会计凭证的自定义纸型,其宽度为26cm,高度为13cm,操作步骤如下: 步骤一 单击"开始"

SharePoint 2013 App开发中自定义网站栏,内容类型及列表

打开vs2012新建项目. 开发中自定义网站栏,内容类型及列表-sharepoint自定义列表"> 选择Sharepoint hosted模式. 一个app开发的项目就创建好了. 创建网站栏 1.右键项目>添 加>新建项>Site column 创建一个网站栏 2.在element.xml中添加以下 字段. <?xml version="1.0" encoding="utf-8"?> <Elements xmlns

WPS文字中自定义直线的起始点和终止点的方法

  WPS文字中自定义直线的起始点和终止点的方法 1.打开WPS文字软件,单击"视图"选项卡,在弹出的下拉菜单选择"工具栏"选项中的"绘图"命令,从而添加一个绘图工具栏; 2.此时在软件的底部会出现一个绘图工具栏,单击"自选图形"按钮,在弹出的菜单中找到"线条"图形,并且单击; 3.然后在文档中绘制一个直线,选中绘制好的图形单击右键,在弹出的快捷菜单中选择"设置对象格式"命令; 4.在弹

在WPS文字中自定义设置的项目符号的方法

  如上图,在WPS文字中的这四种不同的项目符号当中,你更喜欢哪一种呢?或者你想使用你觉得更好看的项目符号呢? 其实除了传统的黑点.黑方这些项目符号,我们也可以在WPS文字中自定义设置的项目符号. 在WPS文字中自定义设置的项目符号的具体操作,请看以下动画教程.

PowerPoint 2013中自定义主题背景样式的方法

PowerPoint 2013中自定义主题背景样式的方法 1.启动PowerPoint 2013,打开演示文稿.在"设计"选项卡的"变体"组中单击"其他"按钮 ,在打开的下拉列表中选择"背景样式"选项,在打开的级联列表中单击背景样式选项即可将其应用到演示文稿中,如图1所示. 图1 选择背景样式应用到幻灯片中 2.在"设计"选项卡的"变体"组中单击"其他"按钮 ,在打开