从类图中我们可以看到,Cocos2d-JS中有内置的11种粒子,这些粒子的属性都是预先定义好的,我们也可以在程序代码中单独修改某些属性,我们在上一节的实例中都已经实现了这些属性的设置。
内置粒子系统
内置的11种粒子系统说明如下: 
ParticleExplosion。爆炸粒子效果,属于半径模式。
ParticleFire。火焰粒子效果,属于重力径模式。
ParticleFireworks。烟花粒子效果,属于重力模式。
ParticleFlower。花粒子效果,属于重力模式。
ParticleGalaxy。星系粒子效果,属于半径模式。
ParticleMeteor。流星粒子效果,属于重力模式。
ParticleSpiral。漩涡粒子效果,属于半径模式。
ParticleSnow。雪粒子效果,属于重力模式。
ParticleSmoke。烟粒子效果,属于重力模式。
ParticleSun。太阳粒子效果,属于重力模式。
ParticleRain。雨粒子效果,属于重力模式。
这11种粒子的属性,根据它的发射模式不同,效果不同。
实例:内置粒子系统
下面我们通过一个实例演示一下这11种内置粒子系统。这个实例如图所示,左图是一个操作菜单场景,选择菜单可以进入到上图动作场景,在下图动作场景中演示选择的粒子系统效果,点击右下角返回按钮可以返回到菜单场景。

内置粒子系统实例

下面我们重点介绍一下场景MyActionScene,它的MyActionScene.js代码如下:

  1. var MyActionLayer = cc.Layer.extend({
  2. flagTag: 0,                         // 操作标志
  3. pLabel: null,                                                       ①
  4. ctor: function (flagTag) {
  5. this._super();
  6. this.flagTag = flagTag;
  7. cc.log("MyActionLayer init flagTag " + this.flagTag);
  8. var size = cc.director.getWinSize();
  9. var backMenuItem = new cc.LabelBMFont("<Back", res.fnt_fnt);
  10. var backMenuItem = new cc.MenuItemLabel(backMenuItem, this.backMenu, this);
  11. backMenuItem.x = size.width - 100;
  12. backMenuItem.y = 100;
  13. var mn = cc.Menu.create(backMenuItem);
  14. mn.x = 0;
  15. mn.y = 0;
  16. mn.anchorX = 0.5;
  17. mn.anchorY = 0.5;
  18. this.addChild(mn);
  19. this.pLabel =  new cc.LabelBMFont("", res.fnt_fnt);
  20. this.pLabel.x = size.width /2;
  21. this.pLabel.y = size.height  - 50;
  22. this.addChild(this.pLabel, 3);
  23. return true;
  24. },
  25. backMenu: function (sender) {
  26. cc.director.popScene();
  27. },
  28. onEnterTransitionDidFinish: function () {
  29. cc.log("Tag = " + this.flagTag);
  30. var sprite = this.getChildByTag(SP_TAG);
  31. var size = cc.director.getWinSize();
  32. var system;
  33. switch (this.flagTag) {                                         ②
  34. case ActionTypes.kExplosion:
  35. system = new cc.ParticleExplosion();
  36. this.pLabel.setString("Explosion");
  37. break;
  38. case ActionTypes.kFire:
  39. system = new cc.ParticleFire();
  40. system.texture = cc.textureCache.addImage(res.s_fire);              ③
  41. this.pLabel.setString("Fire");
  42. break;
  43. case ActionTypes.kFireworks:
  44. system = new cc.ParticleFireworks();
  45. this.pLabel.setString("Fireworks");
  46. break;
  47. case ActionTypes.kFlower:
  48. system = new cc.ParticleFlower();
  49. this.pLabel.setString("Flower");
  50. break;
  51. case ActionTypes.kGalaxy:
  52. system = new cc.ParticleGalaxy();
  53. this.pLabel.setString("Galaxy");
  54. break;
  55. case ActionTypes.kMeteor:
  56. system = new cc.ParticleMeteor();
  57. this.pLabel.setString("Meteor");
  58. break;
  59. case ActionTypes.kRain:
  60. system = new cc.ParticleRain();
  61. this.pLabel.setString("Rain");
  62. break;
  63. case ActionTypes.kSmoke:
  64. system = new cc.ParticleSmoke();
  65. this.pLabel.setString("Smoke");
  66. break;
  67. case ActionTypes.kSnow:
  68. system = new cc.ParticleSnow();
  69. this.pLabel.setString("Snow");
  70. break;
  71. case ActionTypes.kSpiral:
  72. system = new cc.ParticleSpiral();
  73. this.pLabel.setString("Spiral");
  74. break;
  75. case ActionTypes.kSun:
  76. system = new cc.ParticleSun();
  77. this.pLabel.setString("Sun");
  78. break;                                                  ④
  79. }
  80. system.x = size.width /2;
  81. system.y = size.height /2;
  82. this.addChild(system);
  83. }
  84. });
  85. var MyActionScene = cc.Scene.extend({
  86. onEnter: function () {
  87. this._super();
  88. }
  89. });

在头文件中第①行代码定义了LabelBMFont类型的成员变量pLabel,用来在场景中显示粒子系统的名称。
我们在MyActionLayer的onEnterTransitionDidFinish函数中创建粒子系统对象,而不是在MyActionLayer的onEnter函数创建,这是因为MyActionLayer的onEnter函数调用时,场景还没有显示,如果在该函数中创建爆炸等显示一次的粒子系统,等到场景显示的时候,爆炸已经结束了,我们会看不到效果。
代码第②~④行创建了11种粒子系统,这里创建粒子系统时候都采用了它们的默认属性值。其中this.pLabel.setString("XXX")函数是为场景中标签设置内容,这样在进入场景后可以看到粒子系统的名称。

另外,如果在Web浏览器中运行还需要为粒子系统添加纹理,我们只在代码第③行添加了火粒子纹理,其它的粒子纹理添加类似。

更多内容请关注最新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-x内置粒子系统

    从类图中我们可以看到,Cocos2d-x中有内置的11粒子,这些粒子的属性都是预先定义好的,我们也可以在程序代码中单独修改某些属性,我们在上一节的实例中都已经实现了这些属性的设置. 内置粒子系统 内置 ...

  2. 4、js内置函数

    前言:上一篇我介绍了函数的基本概念,和一些简单的Demo.其实很多函数是js内置的,我们无需自己去写,直接拿过来用即可.内置函数分为全局函数和js内置对象的函数区别:全局函数不属于任何一个内置对象.理 ...

  3. 4月5日--课堂笔记--JS内置对象

    JavaScript 4.5 一.    JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i.       没有参数:创建一个初始容量为0的数组 ii. ...

  4. JS内置对象有哪些?

    JS内置对象分为数据封装类对象和其他对象 数据封装类对象:String,Boolean,Number,Array,和Object; 其他对象:Function,Arguments,Math,Date, ...

  5. JS内置对象-String对象、Date日期对象、Array数组对象、Math对象

    一.JavaScript中的所有事物都是对象:字符串.数组.数值.函数... 1.每个对象带有属性和方法 JavaScript允许自定义对象 2.自定义对象 a.定义并创建对象实例 b.使用函数来定义 ...

  6. js 内置对象和方法 示例

    JS内置函数不从属于任何对象,在JS语句的任何地方都可以直接使用这些函数.JS中常用的内置函数如下: 1.eval(str)接收一个字符串形式的表达式,并试图求出表达式的值.作为参数的表达式可以采用任 ...

  7. 【ES6】改变 JS 内置行为的代理与反射

    代理(Proxy)可以拦截并改变 JS 引擎的底层操作,如数据读取.属性定义.函数构造等一系列操作.ES6 通过对这些底层内置对象的代理陷阱和反射函数,让开发者能进一步接近 JS 引擎的能力. 一.代 ...

  8. 5月15日上课笔记-js中 location对象的属性、document对象、js内置对象、Date事件对象、

    location的属性: host: 返回当前主机名和端口号 定时函数: setTimeout( ) setInterval() 二.document对象 getElementById(); 根据ID ...

  9. JS内置对象的原型不能重定义?只能动态添加属性或方法?

    昨天马上就快下班了,坐在我对面的同事突然问我一个问题,我说“爱过”,哈哈,开个玩笑.情况是这样的,他发现JS的内置对象的原型好像不能通过字面量对象的形式进行覆盖, 只能动态的为内置对象的原型添加属性或 ...

随机推荐

  1. QML学习笔记之二

    //必须要导入,否则以下元素将无效 import QtQuick 1.1 //对象一:矩形Rectangle Rectangle { width: 798 height: 111 //整个Rectan ...

  2. ProgressBarLayoutView

    https://github.com/alter-ego/ProgressBarLayoutView

  3. [原创]-CMD命令设置IP地址

    问题描述 在实际工作中,尤其是像我们这种BI分析人员,在做项目的时候,时常都需要因客户的不同随时切换不同的网络环境,有时可能需要在公司和客户之间来回的穿梭.交替.问题也就随之而来:每次客户那里都需要设 ...

  4. Oracle中关于清除数据和释放表空间

    一.表的重命名 flashback table test2 to before drop rename to test3;--[to test3]将表重命名 drop table test3 purg ...

  5. 疑难杂症:java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion(Ljava/lang/String;)V

    错误: java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion(Ljava/lang/Strin ...

  6. QThread与QWidget使用

    本文主要内容: 在任务一中,用 四 种方式实现:点击界面按钮,开线程运行一段程序,结果显示在一个Label上.1. 用不正确的方式得到看似正确的结果2. 用Qt Manual 和 例子中使用的方法3. ...

  7. 如何保护你的linux操作系统

    如何保护你的linux操作系统 导读 在现在这个世道中,Linux操作系统的安全是十分重要的.但是,你得知道怎么干.一个简单反恶意程序软件是远远不够的,你需要采取其它措施来协同工作.那么试试下面这些手 ...

  8. Android 自定义组合控件

    1, you need to add this kind of code to the constructors of your custom view which must extend ViewG ...

  9. Triangular Sums

    描述 The nth Triangular number, T(n) = 1 + … + n, is the sum of the first n integers. It is the number ...

  10. 1.4.2 solr字段类型--(1.4.2.7)字段属性使用案例

    1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...