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

  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文件中textureFileName属性指定了纹理图片,纹理图片宽高必须是2的n次幂,大小不要超过64x64像素,在美工设计纹理图片时候,不用关注太多细节,例如:设计雪花纹理图片时候,按照雪花是有6个角的,很多人会设计为下图所示的样式,而事实上我们需要的下图所示的渐变效果的圆点。

雪花图片
 
雪花粒子纹理图片

提示 描述粒子属性的plist文件,可以通过粒子系统设计工具生成,有关粒子系统工具使用大家可以参考本系列丛书的工具卷(《Cocos2d-JS实战(卷Ⅳ):工具详解》)。
下面我们通过实现如下图所示的下雪粒子系统,介绍一下自定义粒子系统的实现。

下雪粒子系统实例

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

  1. var HelloWorldLayer = cc.Layer.extend({
  2. ctor: function () {
  3. //////////////////////////////
  4. // 1. super init first
  5. this._super();
  6. var size = cc.director.getWinSize();
  7. var bg = new cc.Sprite("res/background-1.png");
  8. bg.x = size.width / 2;
  9. bg.y = size.height / 2;
  10. this.addChild(bg);
  11. var particleSystem = new cc.ParticleSystem("res/snow.plist");
  12. particleSystem.x = size.width / 2;
  13. particleSystem.y = size.height - 50;
  14. this.addChild(particleSystem);
  15. return true;
  16. }
  17. });

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

更多内容请关注最新Cocos图书《Cocos2d-x实战:JS卷——Cocos2d-JS开发》

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

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

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

《Cocos2d-x实战 JS卷》现已上线,各大商店均已开售:

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

欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息

Cocos2d-JS自定义粒子系统的更多相关文章

  1. cocos2d JS 自定义事件分发器(接收与传递数据) eventManager

    简而言之,它不是由系统自动触发,而是人为的干涉 较多情况用于传递数据 var _listener1 = cc.EventListener.create({ event: cc.EventListene ...

  2. js自定义验证码

    分享一个js自定义的验证码 window.onload = function () {     var code;     $('.changePassword').click(function () ...

  3. js自定义弹出框

    js自定义弹出框: 代码如下 <html> <head><title>自定义弹出对话框</title> <style type ="te ...

  4. 超酷HTML5 Canvas图表应用Chart.js自定义提示折线图

    超酷HTML5 Canvas图表应用Chart.js自定义提示折线图 效果预览 实例代码 <div class="htmleaf-container"> <div ...

  5. 与你相遇好幸运,Sails.js自定义responses

    在 /api/responses/ 新建文件 >serviceDBError.js 自定义的数据库错误 >serviceError.js  自定义的数据错误 >serviceSucc ...

  6. Cocos2d-x中自定义粒子系统

    除了使用Cocos2d-x的11种内置粒子系统外,我们还可以通过创建ParticleSystemQuad对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统.使用 ...

  7. jquery.validate.js默认配置,jquery.validate.js自定义提示信息

    jquery.validate.js默认配置,jquery.validate.js自定义提示信息 配置jQuery.validator默认的处理方法 >>>>>>& ...

  8. web前端对上传的文件进行类型大小判断的js自定义函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. js自定义事件、DOM/伪DOM自定义事件

    一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ...

随机推荐

  1. cdoj 24 8球胜负(eight) 水题

    8球胜负(eight) Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/24 ...

  2. WinForm特效:拦截窗体上各个部位的点击

    windows窗体的标题栏无法直接通过一些默认的事件来控制,需要了解和WM_NCHITTEST相关的windows消息. 以下示例演示了最简单的效果片断: 他会把客户区和标题栏的效果互换,比如无法按住 ...

  3. jQuery 属性操作 - addClass() 方法

    使用 addClass() 和 removeClass() 来移除 class,并添加新的 class. <html> <head> <script type=" ...

  4. Spark SQL - DataFrame

    1 Overview Spark SQL is a Spark module for structured data processing. It provides a programming abs ...

  5. spring框架七大模块

    1. Spring Core: Core封装包是框架的最基础部分,提供IOC和依赖注入特性.这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并 ...

  6. 关于Android 访问权限设置

    我前几天在做同城交友网(www.niyuewo.com)与医药网(www.yiyaojing.com)时遇到的问题整理如下: Android开发应用程序时,如果应用程序需要访问网络权限,需要在 And ...

  7. Linux下mv命令详解

    mv命令格式:mv [选项] 源文件或目录 目标文件或目录 mv命令参数(选项): -b :若需覆盖文件,则覆盖前先行备份. -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖: ...

  8. C#使用简单邮件传输协议(SMTP)发送邮件

    1.首先引入命名空间: using System.Net.Mail; 2.定义邮件配置类: public class EmailServiceConfig { /// <summary> ...

  9. 每天一个Linux命令(1):ls命令

    转自http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html ls命令是Linux下最常用的命令.ls命令就是list的缩写,缺省下ls ...

  10. [转]c# xml.Load() locking file on disk causing errors

    本文转自:http://stackoverflow.com/questions/1812598/c-sharp-xml-load-locking-file-on-disk-causing-errors ...