Cocos2d-JS自定义粒子系统

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>angle</key>
	<real>270</real>
	<key>angleVariance</key>
	<real>5</real>
	<key>blendFuncDestination</key>
	<integer>771</integer>
	<key>blendFuncSource</key>
	<integer>1</integer>
	<key>duration</key>
	<real>-1</real>
	<key>emitterType</key>
	<real>0.0</real>
	<key>finishColorAlpha</key>
	<real>1</real>
	<key>finishColorBlue</key>
	<real>1</real>
	<key>finishColorGreen</key>
	<real>1</real>
	<key>finishColorRed</key>
	<real>1</real>
	<key>finishColorVarianceAlpha</key>
	<real>0.0</real>
	<key>finishColorVarianceBlue</key>
	<real>0.0</real>
	<key>finishColorVarianceGreen</key>
	<real>0.0</real>
	<key>finishColorVarianceRed</key>
	<real>0.0</real>
	<key>finishParticleSize</key>
	<real>-1</real>
	<key>finishParticleSizeVariance</key>
	<real>0.0</real>
	<key>gravityx</key>
	<real>0.0</real>
	<key>gravityy</key>
	<real>-10</real>
	<key>maxParticles</key>
	<real>700</real>
	<key>maxRadius</key>
	<real>0.0</real>
	<key>maxRadiusVariance</key>
	<real>0.0</real>
	<key>minRadius</key>
	<real>0.0</real>
	<key>minRadiusVariance</key>
	<real>0.0</real>
	<key>particleLifespan</key>
	<real>3</real>
	<key>particleLifespanVariance</key>
	<real>1</real>
	<key>radialAccelVariance</key>
	<real>0.0</real>
	<key>radialAcceleration</key>
	<real>1</real>
	<key>rotatePerSecond</key>
	<real>0.0</real>
	<key>rotatePerSecondVariance</key>
	<real>0.0</real>
	<key>rotationEnd</key>
	<real>0.0</real>
	<key>rotationEndVariance</key>
	<real>0.0</real>
	<key>rotationStart</key>
	<real>0.0</real>
	<key>rotationStartVariance</key>
	<real>0.0</real>
	<key>sourcePositionVariancex</key>
	<real>1200</real>
	<key>sourcePositionVariancey</key>
	<real>0.0</real>
	<key>speed</key>
	<real>130</real>
	<key>speedVariance</key>
	<real>30</real>
	<key>startColorAlpha</key>
	<real>1</real>
	<key>startColorBlue</key>
	<real>1</real>
	<key>startColorGreen</key>
	<real>1</real>
	<key>startColorRed</key>
	<real>1</real>
	<key>startColorVarianceAlpha</key>
	<real>0.0</real>
	<key>startColorVarianceBlue</key>
	<real>0.0</real>
	<key>startColorVarianceGreen</key>
	<real>0.0</real>
	<key>startColorVarianceRed</key>
	<real>0.0</real>
	<key>startParticleSize</key>
	<real>10</real>
	<key>startParticleSizeVariance</key>
	<real>5</real>
	<key>tangentialAccelVariance</key>
	<real>0.0</real>
	<key>tangentialAcceleration</key>
	<real>1</real>
	<key>textureFileName</key>
	<string>snow.png</string>
</dict>
</plist>

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

雪花图片

雪花粒子纹理图片

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

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

var HelloWorldLayer = cc.Layer.extend({

	ctor: function () {
        //////////////////////////////
        // 1. super init first
        this._super();
        var size = cc.director.getWinSize();

        var bg = new cc.Sprite("res/background-1.png");
        bg.x = size.width / 2;
        bg.y = size.height / 2;
        this.addChild(bg);

        var particleSystem = new cc.ParticleSystem("res/snow.plist");
        particleSystem.x = size.width / 2;
        particleSystem.y = size.height - 50;
        this.addChild(particleSystem);

        return true;
    }
});

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

更多内容请关注最新Cocos图书《Cocos2d-x实战:JS卷——Cocos2d-JS开发》
本书交流讨论网站:http://www.cocoagame.net

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

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

智捷课堂现推出Cocos会员,敬请关注:http://v.51work6.com/courseInfoRedirect.do?action=netDetialInfo&courseId=844465&amp;categoryId=0

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

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

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

时间: 2024-09-04 07:21:46

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

JS自定义对象实现Java中Map对象功能的方法

这篇文章主要介绍了JS自定义对象实现Java中Map对象功能的方法,可实现类似Java中Map对象增删改查等功能,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容! 这里Key

Cocos2d-x中自定义粒子系统

除了使用Cocos2d-x的11种内置粒子系统外我们还可以通过创建ParticleSystemQuad对象并设置属性实现自定义粒子系统通过这种方式完全可以实现我们说需要的各种效果的粒子系统.使用ParticleSystemQuad自定义粒子系统至少有两种方式可以实现代码创建和plist文件创建. 代码创建 所谓代码创建就是完全通过代码方式实现其中所有的属性全部是通过程序代码设置.这要求开发人员对于这些属性值非常熟悉而且这种方式无法预览只能通过程序运行看效果调整再运行看效果再调整因此比较麻烦. 要

JS自定义对象实现Java中Map对象功能的方法_javascript技巧

本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容!   这里Key,你要使用String类型,和Java一样,你可以进行一些增加,删除,修改,获得的操作. 使用很简单,我先把工具类给大家看下: 复制代码 代码如下: /**  *

php php调用js js-PHP中如何调用JS自定义函数

问题描述 PHP中如何调用JS自定义函数 大家好,小弟最近在做一个PHP页面,页面中有一个下拉列表的onchange事件需要调用一个JS文件中得方法,我试了很多次依然不能成功,请各位大神帮忙出出主意吧~!跪谢~~! 解决方案 PHP是无法直接调用JS函数的,因为不是一个层面的东西,如果你想问的是PHP与JS通信,可把数据互通 参考:PHP与Javascript通信流程深入解析 解决方案二: 这个问题啊,怎么说呢,首先得明白html和js的关系,其实js是脚本,php也是脚本,当时设计出来的初衷都

JS自定义混合Mixin函数示例_javascript技巧

本文实例讲述了JS自定义混合Mixin函数.分享给大家供大家参考,具体如下: <script type="text/javascript"> /* 增加函数 */ function augment(receivingClass, givingClass) { for(methodName in givingClass.prototype) { if(!receivingClass.prototype[methodName]) { receivingClass.prototy

JS自定义函数对web前端上传的文件进行类型大小判断_javascript技巧

废话不多说了直接给大家贴js代码了.具体代码如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <me

JS自定义选项卡函数及用法实例分析_javascript技巧

本文实例讲述了JS自定义选项卡函数及用法.分享给大家供大家参考.具体如下: 这里分享一个JS选项卡函数附带演示效果,选项卡函数参数调用说明: cmd:点击元素集合 con:显示容器集合 evt:触发事件 css:为当前点击元素的样式名称 index:为默认显示第几项的索引值 目前选项卡的样式还比较简洁和粗糙,想用的自己动动手美化一下. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-zdy-tab-cha-fun-style-codes/

js自定义事件及事件交互原理概述(二)_javascript技巧

js自定义事件(一)的目的只是让大家简单的理解自定事件是如何模拟出来的,大家不难发现会有很多缺陷,比如: 1.此事件对象只能注册一个事件,不能提供多个事件 2.注册方法没有返回的一些信息 下面我们就来解决这些问题.如下为MyEvent.js源代码: 复制代码 代码如下: function MyEvent(){ this.handlers={}; } MyEvent.prototype={ addHandler:function(type,handler) { if(typeof this.han

js自定义回调函数_javascript技巧

背景分析 首先看一段js的代码,主要实现添加的时候首先通过异步请求判断是否存在,如果不存在的话,在进行添加操作: function add(url,data) { var isExited = isExited(data); if(!isExited){ addRequest(url, data); } } 当我添加一个数据的时候,我首先通过判断是否在数据库中存在(当然,如果前后台彻底分离的话,不应该前端进行业务逻辑的判断,前端只应该,用来展示数据),首先,isExited()的请求是ajax请