从类图中我们可以看到,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. Codeforces Round #342 (Div. 2) B. War of the Corporations 贪心

    B. War of the Corporations 题目连接: http://www.codeforces.com/contest/625/problem/B Description A long ...

  2. Codeforces Round #288 (Div. 2)D. Tanya and Password 欧拉通路

    D. Tanya and Password Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/508 ...

  3. 使用AmplifyJS和JQuery编写更好更优雅的javascript事件处理代码

    事件(或消息)是一种经常使用的软件设计模式.可以减少消息处理者和消息公布者的之间的耦合,比方J2EE里面的JMS规范.设计模式中的观察者模式(也叫公布/订阅模式).这对于javascript代码相同适 ...

  4. Cocos2d-x 3.1 内存管理机制

    Cocos2d-x使用的内存管理方式是引用计数.引用计数是一种非常有效的机制.通过给每个对象维护一个引用计数器,记录该对象当前被引用的次数.当对象添加一次引用时,计数器加1:而对象失去一次引用时.计数 ...

  5. String当中的高效函数(优化)

    1. indexOf()函数是一个执行速度非常快的函数,可以用其与subString()实现高效的字符串分割,比内置的要高效. 2. charAt()方法也是高效率的函数,可以用其实现高效的start ...

  6. UNIX/Linux网络编程基础:图解TCP/IP协议栈

    目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...

  7. PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)

    文档注释,无非“//”和“/**/”两种 ,自己写代码,就那么点,适当写几句就好了:但是一个人总有融入团队的一天,团队的交流不是那几句注释和一张嘴能解决的,还需要通用的注释标准. PHPDoc是PHP ...

  8. rm反向删除的几种方法

    关键词:rm  删除 反向 参考: http://blog.sina.com.cn/s/blog_67e34ceb01014930.html http://bbs.csdn.net/topics/39 ...

  9. magic_quotes_gpc(魔术引号开关)

    magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊 ...

  10. Xcode 8 用处不大的新特性:CLANG_WARN_INFINITE_RECURSION

    来源:酷酷的哀殿 链接:http://www.jianshu.com/p/067f4674f75f Xcode 8 的 clang 新的警告控制,当所有路径都通过一个函数都调用自身时,会产生一个警告 ...