Cocos2d-JS内置粒子系统
从类图中我们可以看到,Cocos2d-JS中有内置的11种粒子,这些粒子的属性都是预先定义好的,我们也可以在程序代码中单独修改某些属性,我们在上一节的实例中都已经实现了这些属性的设置。
内置粒子系统
内置的11种粒子系统说明如下:
ParticleExplosion。爆炸粒子效果,属于半径模式。
ParticleFire。火焰粒子效果,属于重力径模式。
ParticleFireworks。烟花粒子效果,属于重力模式。
ParticleFlower。花粒子效果,属于重力模式。
ParticleGalaxy。星系粒子效果,属于半径模式。
ParticleMeteor。流星粒子效果,属于重力模式。
ParticleSpiral。漩涡粒子效果,属于半径模式。
ParticleSnow。雪粒子效果,属于重力模式。
ParticleSmoke。烟粒子效果,属于重力模式。
ParticleSun。太阳粒子效果,属于重力模式。
ParticleRain。雨粒子效果,属于重力模式。
这11种粒子的属性,根据它的发射模式不同,效果不同。
实例:内置粒子系统
下面我们通过一个实例演示一下这11种内置粒子系统。这个实例如图所示,左图是一个操作菜单场景,选择菜单可以进入到上图动作场景,在下图动作场景中演示选择的粒子系统效果,点击右下角返回按钮可以返回到菜单场景。
下面我们重点介绍一下场景MyActionScene,它的MyActionScene.js代码如下:
- var MyActionLayer = cc.Layer.extend({
- flagTag: 0, // 操作标志
- pLabel: null, ①
- ctor: function (flagTag) {
- this._super();
- this.flagTag = flagTag;
- cc.log("MyActionLayer init flagTag " + this.flagTag);
- var size = cc.director.getWinSize();
- var backMenuItem = new cc.LabelBMFont("<Back", res.fnt_fnt);
- var backMenuItem = new cc.MenuItemLabel(backMenuItem, this.backMenu, this);
- backMenuItem.x = size.width - 100;
- backMenuItem.y = 100;
- var mn = cc.Menu.create(backMenuItem);
- mn.x = 0;
- mn.y = 0;
- mn.anchorX = 0.5;
- mn.anchorY = 0.5;
- this.addChild(mn);
- this.pLabel = new cc.LabelBMFont("", res.fnt_fnt);
- this.pLabel.x = size.width /2;
- this.pLabel.y = size.height - 50;
- this.addChild(this.pLabel, 3);
- return true;
- },
- backMenu: function (sender) {
- cc.director.popScene();
- },
- onEnterTransitionDidFinish: function () {
- cc.log("Tag = " + this.flagTag);
- var sprite = this.getChildByTag(SP_TAG);
- var size = cc.director.getWinSize();
- var system;
- switch (this.flagTag) { ②
- case ActionTypes.kExplosion:
- system = new cc.ParticleExplosion();
- this.pLabel.setString("Explosion");
- break;
- case ActionTypes.kFire:
- system = new cc.ParticleFire();
- system.texture = cc.textureCache.addImage(res.s_fire); ③
- this.pLabel.setString("Fire");
- break;
- case ActionTypes.kFireworks:
- system = new cc.ParticleFireworks();
- this.pLabel.setString("Fireworks");
- break;
- case ActionTypes.kFlower:
- system = new cc.ParticleFlower();
- this.pLabel.setString("Flower");
- break;
- case ActionTypes.kGalaxy:
- system = new cc.ParticleGalaxy();
- this.pLabel.setString("Galaxy");
- break;
- case ActionTypes.kMeteor:
- system = new cc.ParticleMeteor();
- this.pLabel.setString("Meteor");
- break;
- case ActionTypes.kRain:
- system = new cc.ParticleRain();
- this.pLabel.setString("Rain");
- break;
- case ActionTypes.kSmoke:
- system = new cc.ParticleSmoke();
- this.pLabel.setString("Smoke");
- break;
- case ActionTypes.kSnow:
- system = new cc.ParticleSnow();
- this.pLabel.setString("Snow");
- break;
- case ActionTypes.kSpiral:
- system = new cc.ParticleSpiral();
- this.pLabel.setString("Spiral");
- break;
- case ActionTypes.kSun:
- system = new cc.ParticleSun();
- this.pLabel.setString("Sun");
- break; ④
- }
- system.x = size.width /2;
- system.y = size.height /2;
- this.addChild(system);
- }
- });
- var MyActionScene = cc.Scene.extend({
- onEnter: function () {
- this._super();
- }
- });
在头文件中第①行代码定义了LabelBMFont类型的成员变量pLabel,用来在场景中显示粒子系统的名称。
我们在MyActionLayer的onEnterTransitionDidFinish函数中创建粒子系统对象,而不是在MyActionLayer的onEnter函数创建,这是因为MyActionLayer的onEnter函数调用时,场景还没有显示,如果在该函数中创建爆炸等显示一次的粒子系统,等到场景显示的时候,爆炸已经结束了,我们会看不到效果。
代码第②~④行创建了11种粒子系统,这里创建粒子系统时候都采用了它们的默认属性值。其中this.pLabel.setString("XXX")函数是为场景中标签设置内容,这样在进入场景后可以看到粒子系统的名称。
另外,如果在Web浏览器中运行还需要为粒子系统添加纹理,我们只在代码第③行添加了火粒子纹理,其它的粒子纹理添加类似。
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
《Cocos2d-x实战 JS卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11659698.html
欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息
Cocos2d-JS内置粒子系统的更多相关文章
- Cocos2d-x内置粒子系统
从类图中我们可以看到,Cocos2d-x中有内置的11粒子,这些粒子的属性都是预先定义好的,我们也可以在程序代码中单独修改某些属性,我们在上一节的实例中都已经实现了这些属性的设置. 内置粒子系统 内置 ...
- 4、js内置函数
前言:上一篇我介绍了函数的基本概念,和一些简单的Demo.其实很多函数是js内置的,我们无需自己去写,直接拿过来用即可.内置函数分为全局函数和js内置对象的函数区别:全局函数不属于任何一个内置对象.理 ...
- 4月5日--课堂笔记--JS内置对象
JavaScript 4.5 一. JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i. 没有参数:创建一个初始容量为0的数组 ii. ...
- JS内置对象有哪些?
JS内置对象分为数据封装类对象和其他对象 数据封装类对象:String,Boolean,Number,Array,和Object; 其他对象:Function,Arguments,Math,Date, ...
- JS内置对象-String对象、Date日期对象、Array数组对象、Math对象
一.JavaScript中的所有事物都是对象:字符串.数组.数值.函数... 1.每个对象带有属性和方法 JavaScript允许自定义对象 2.自定义对象 a.定义并创建对象实例 b.使用函数来定义 ...
- js 内置对象和方法 示例
JS内置函数不从属于任何对象,在JS语句的任何地方都可以直接使用这些函数.JS中常用的内置函数如下: 1.eval(str)接收一个字符串形式的表达式,并试图求出表达式的值.作为参数的表达式可以采用任 ...
- 【ES6】改变 JS 内置行为的代理与反射
代理(Proxy)可以拦截并改变 JS 引擎的底层操作,如数据读取.属性定义.函数构造等一系列操作.ES6 通过对这些底层内置对象的代理陷阱和反射函数,让开发者能进一步接近 JS 引擎的能力. 一.代 ...
- 5月15日上课笔记-js中 location对象的属性、document对象、js内置对象、Date事件对象、
location的属性: host: 返回当前主机名和端口号 定时函数: setTimeout( ) setInterval() 二.document对象 getElementById(); 根据ID ...
- JS内置对象的原型不能重定义?只能动态添加属性或方法?
昨天马上就快下班了,坐在我对面的同事突然问我一个问题,我说“爱过”,哈哈,开个玩笑.情况是这样的,他发现JS的内置对象的原型好像不能通过字面量对象的形式进行覆盖, 只能动态的为内置对象的原型添加属性或 ...
随机推荐
- tomcat解压war包的一点例外
我在项目的开发过程中,发现Tomcat解压war 的一点例外. 现象如下: 使用ANT工具把web应用程序打包为war文件.然后把war文件放到tomcat的webapps,让tomca ...
- 兼容,原来在这里就已经開始--------Day34
看了两天,算是将w3cschool的javascript部分浏览了一遍.在脑海中大约有了一点概念,也才真切体会到:一入江湖深似海.欲穷此路难上难啊,至少如今看起来是遥遥无期.太多不懂, 太多茫然,只是 ...
- 好看的UI界面
- 有趣的动画视图集合:Android View Animations
Android View Animations这个项目收集了各种有趣的动画效果. 所有效果: Attension Flash, Pulse, RubberBand, Shake, Swing, Wob ...
- Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)
这节我们来学习Cocos2d-x的最后一节.怎样处理重力感应事件.移植到Android后加入再按一次返回键退出游戏等.我这里用的Android.IOS不会也没设备呃 效果图不好弄,由于是要移植到真机上 ...
- 三星Galaxy S4(GT-I9500)获取ROOT权限教程(转)
http://news.candou.com/2013-05-20/453695_1.shtml 获取root权限的方法
- 现有一些开源ESB总线的比較
现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,如今已经是百花争鸣的景象了.如今我就对现有的各种开源ESB总线根据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. 一. ...
- navigationController pushViewController 多次跳转后怎么返回
使用NavigationViewController进行页面跳转时,应该使用pushViewController方法来跳转至下一页面,这样的话,下一页面同样在NavigationViewControl ...
- Quartz 设置一个半小时任务实现
该文章属于本人原创,转载请注明出处. spring + Quartz 设置定时任务时要求没一个半小时执行一次 设置两个相同的定时任务 第一个从整点开始每三小时执行一次 ...
- IIS错误日志:Failed to execute request because the App-Domain
装上IIS和.net2.0框架后,打开ASP.NET站点,出现Server Application Error,出先此问题,一般先看系统的“事件管理器”,于是查看服务器的“事件管理器”中的“应用程序” ...