`

Cocos2d-x中自定义粒子系统

 
阅读更多

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

代码创建

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

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

 

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

 

[html] view plaincopy
 
  1. bool HelloWorld::init()  
  2. {  
  3. if ( !Layer::init() )  
  4. {  
  5. return false;  
  6. }  
  7.    
  8. Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.    
  10. auto bg = Sprite::create("background-1.png");  
  11.    
  12. bg->setPosition(Point(visibleSize.width/2, visibleSize.height /2));  
  13. this->addChild(bg);  
  14.    
  15. auto particleSystem = ParticleSystemQuad::createWithTotalParticles(200);    ①  
  16.    
  17. //设置雪花粒子纹理图片  
  18. particleSystem->setTexture(TextureCache::getInstance()->addImage("snow.png"));    ②  
  19. //设置发射粒子的持续时间-1表示永远持续  
  20. particleSystem->setDuration(-1);  
  21. //设置粒子的重力方向   
  22. particleSystem->setGravity(Point(0,-240));  
  23.    
  24. //设置角度以及偏差  
  25. particleSystem->setAngle(90);   
  26. particleSystem->setAngleVar(360);  
  27.    
  28. //设置径向加速度以及偏差  
  29. particleSystem->setRadialAccel(50);  
  30. particleSystem->setRadialAccelVar(0);  
  31.    
  32. //设置粒子的切向加速度以及偏差  
  33. particleSystem->setTangentialAccel(30);  
  34. particleSystem->setTangentialAccelVar(0);  
  35.    
  36. // 设置粒子初始化位置偏差  
  37. particleSystem->setPosVar(Point(400,0));  
  38.    
  39. //设置粒子生命期以及偏差  
  40. particleSystem->setLife(4);  
  41. particleSystem->setLifeVar(2);  
  42.    
  43. //设置粒子开始时候旋转角度以及偏差  
  44. particleSystem->setStartSpin(30);  
  45. particleSystem->setStartSpinVar(60);  
  46.    
  47. //设置结束时候的旋转角度以及偏差  
  48. particleSystem->setEndSpin(60);  
  49. particleSystem->setEndSpinVar(60);  
  50.    
  51. //设置开始时候的颜色以及偏差  
  52. particleSystem->setStartColor(Color4F(1,1,1,1));  
  53. //设置结束时候的颜色以及偏差  
  54. particleSystem->setEndColor(Color4F(1,1,1,1));  
  55.    
  56. //设置开始时候粒子大小以及偏差  
  57. particleSystem->setStartSize(30);  
  58. particleSystem->setStartSizeVar(0);  
  59.    
  60. //设置粒子结束时候大小以及偏差  
  61. particleSystem->setEndSize(20.0f);  
  62. particleSystem->setEndSizeVar(0);  
  63.    
  64. //设置每秒钟产生粒子的数量  
  65. particleSystem->setEmissionRate(100);  
  66.    
  67. particleSystem->setPosition(Point(visibleSize.width/2, visibleSize.height + 50));  
  68.    
  69. this->addChild(particleSystem);  
  70.    
  71.     return true;  
  72. }  

 

 

上述第①行代码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文件,参考代码如下:

 

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
  3. <plist version="1.0">  
  4. <dict>  
  5. <key>angle</key>  
  6. <real>270</real>  
  7. <key>angleVariance</key>  
  8. <real>5</real>  
  9. <key>blendFuncDestination</key>  
  10. <integer>771</integer>  
  11. <key>blendFuncSource</key>  
  12. <integer>1</integer>  
  13. <key>duration</key>  
  14. <real>-1</real>  
  15. <key>emitterType</key>  
  16. <real>0.0</real>  
  17. <key>finishColorAlpha</key>  
  18. <real>1</real>  
  19. <key>finishColorBlue</key>  
  20. <real>1</real>  
  21. <key>finishColorGreen</key>  
  22. <real>1</real>  
  23. <key>finishColorRed</key>  
  24. <real>1</real>  
  25. <key>finishColorVarianceAlpha</key>  
  26. <real>0.0</real>  
  27. <key>finishColorVarianceBlue</key>  
  28. <real>0.0</real>  
  29. <key>finishColorVarianceGreen</key>  
  30. <real>0.0</real>  
  31. <key>finishColorVarianceRed</key>  
  32. <real>0.0</real>  
  33. <key>finishParticleSize</key>  
  34. <real>-1</real>  
  35. <key>finishParticleSizeVariance</key>  
  36. <real>0.0</real>  
  37. <key>gravityx</key>  
  38. <real>0.0</real>  
  39. <key>gravityy</key>  
  40. <real>-10</real>  
  41. <key>maxParticles</key>  
  42. <real>700</real>  
  43. <key>maxRadius</key>  
  44. <real>0.0</real>  
  45. <key>maxRadiusVariance</key>  
  46. <real>0.0</real>  
  47. <key>minRadius</key>  
  48. <real>0.0</real>  
  49. <key>minRadiusVariance</key>  
  50. <real>0.0</real>  
  51. <key>particleLifespan</key>  
  52. <real>3</real>  
  53. <key>particleLifespanVariance</key>  
  54. <real>1</real>  
  55. <key>radialAccelVariance</key>  
  56. <real>0.0</real>  
  57. <key>radialAcceleration</key>  
  58. <real>1</real>  
  59. <key>rotatePerSecond</key>  
  60. <real>0.0</real>  
  61. <key>rotatePerSecondVariance</key>  
  62. <real>0.0</real>  
  63. <key>rotationEnd</key>  
  64. <real>0.0</real>  
  65. <key>rotationEndVariance</key>  
  66. <real>0.0</real>  
  67. <key>rotationStart</key>  
  68. <real>0.0</real>  
  69. <key>rotationStartVariance</key>  
  70. <real>0.0</real>  
  71. <key>sourcePositionVariancex</key>  
  72. <real>1200</real>  
  73. <key>sourcePositionVariancey</key>  
  74. <real>0.0</real>  
  75. <key>speed</key>  
  76. <real>130</real>  
  77. <key>speedVariance</key>  
  78. <real>30</real>  
  79. <key>startColorAlpha</key>  
  80. <real>1</real>  
  81. <key>startColorBlue</key>  
  82. <real>1</real>  
  83. <key>startColorGreen</key>  
  84. <real>1</real>  
  85. <key>startColorRed</key>  
  86. <real>1</real>  
  87. <key>startColorVarianceAlpha</key>  
  88. <real>0.0</real>  
  89. <key>startColorVarianceBlue</key>  
  90. <real>0.0</real>  
  91. <key>startColorVarianceGreen</key>  
  92. <real>0.0</real>  
  93. <key>startColorVarianceRed</key>  
  94. <real>0.0</real>  
  95. <key>startParticleSize</key>  
  96. <real>10</real>  
  97. <key>startParticleSizeVariance</key>  
  98. <real>5</real>  
  99. <key>tangentialAccelVariance</key>  
  100. <real>0.0</real>  
  101. <key>tangentialAcceleration</key>  
  102. <real>1</real>  
  103. <key>textureFileName</key>  
  104. <string>snow.png</string>  
  105. </dict>  
  106. </plist>  

 

 

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

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

 

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

 

[html] view plaincopy
 
  1. bool HelloWorld::init()  
  2. {  
  3. if ( !Layer::init() )  
  4. {  
  5. return false;  
  6. }  
  7.    
  8. Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.    
  10. auto bg = Sprite::create("background-1.png");  
  11. bg->setPosition(Point(visibleSize.width/2, visibleSize.height /2));  
  12. this->addChild(bg);  
  13.    
  14. auto particleSystem = ParticleSystemQuad::create("snow.plist");  
  15.     particleSystem->setPosition(Point(visibleSize.width/2, visibleSize.height - 50));  
  16. this->addChild(particleSystem);  
  17. return true;  
  18. }  

 

 

从代码可见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课堂微信公共平台
分享到:
评论

相关推荐

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    cocos2d-x事件类

    谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类,还需要实现handleEvent方法 事件发送者和事件接收者要在构造函数和析构函数中调用一下方法 事件发送者...

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    Cocos2d-x高级开发教程

    书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关知识点。此外,书中的教学资源获得《捕鱼达人》手机游戏的授权,读者可以从一流游戏开发中高起点地...

    cocos2d-x-3.2旧版引擎下载

    cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    Cocos2D-X游戏开发技术精解

    资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    精通COCOS2D-X游戏开发 基础卷_2016.4-P399-13961841.pdf

    精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发

    Cocos2D-X游戏开发技术精解.pdf

    《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...

    cocos2d-x开发者文档(中文)2015-01-30

    因为最近在学cocos2d-x,找了半天在网上也找不到一个离线的文档,于是自己抽空做了一个,全部内容提取自cocos2d-x中文官网的文档页http://cn.cocos2d-x.org/article 目前只提取了cocos2d-x部分内容。因为内容比较多...

    cocos2d-x-3.0 类图

    这是我重新弄的cocos2d-x-3.0的类图.之前别人兄台弄的,有些不全面,有些地方错误.我这个可以说是最新的了.每个类添加了中文的详细注解,同时也添加了中文的类名称翻译.这样对cocos2d-x-3.0的框架比较好上手. 有兴趣的...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。

    cocos2d-x windows vs2010配置

    Cocos2d-x windows vs2010 配置图文详解

    Cocos2d-x游戏编程——C++篇 .iso

    Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    cocos2d-x 3.0

    cocos2d-x 3.0 人物行走 . 包里有代码和 图片资源.

    Cocos2d-x-3.x游戏开发之旅

    Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签

Global site tag (gtag.js) - Google Analytics