除了使用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-JS自定义粒子系统的更多相关文章

  1. 浅析HTML5中的download属性使用

    这篇文章主要介绍了浅析HTML5中的download属性使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – 访问文件属性与访问sqlite记录

    >看到上述结果后,我决定选择attributesOfItemAtPath方法.还有什么我不是考虑传递sqlite?

  3. ios – 如果要使用主要的故事板文件,应用程序委托必须实现该窗口属性

    我以编程方式实现列表视图控制器当我尝试运行该项目时,我有错误:当我运行代码时,它挂在main.m上,并显示“thread1:signalSIGABRT”我的代码如下:AppDelegate.hAppDelegate.mFirstViewController是列表视图控制器.解决方法您正在将窗口创建为局部变量,然后尝试通过使用self.window来访问它,就像它是一个属性一样.使它成为一个财产.

  4. ios – 在实现文件中声明属性是一个很好的做法,如果是,有什么用?

    是以下代码,一个很好的编程实践在Objective-C?

  5. xcode – Swift Constants文件 – 类还是结构?

    我想在我的Swift项目中创建一个Constants文件–填充静态let字符串.我应该创建一个结构还是一个类?

  6. ios – 不能在另一个文件的扩展中使用私有属性

    我不能在扩展中使用私有财产.我的扩展名在另一个文件中.我怎样才能在扩展中使用私有财产?

  7. ios – 用于 – 在Counterparts中的ViewController.swift(接口)文件是什么

    有人可以这么善良并解释这个文件的目的是什么?

  8. swift开发

    [myTableViewinsertSubview:mySubviewatIndex:2在Swift中如下调用。在Objective-C中的指针在导入Swift时被映射为Swift语言的optional类型。importUIKitclassMySwiftViewControllerUIViewController{//definetheclass}如下定义了一个采用Objective-C中的UITableViewDelegate和UITableViewDataSource协议的Swift类MySwiftV

  9. Swift学习: 从Objective-C到Swift

    希望这篇文章能够帮助已经有Objective-C经验的开发者更快地学习Swift。我们熟悉的Objective-C特性在Swift中如何展现。从Objective-C到Swift的进步改进。然后值得注意的是,在Objective-C中,我们可以跨过property直接与instancevariable打交道,而在Swift是不可以的。ASwiftpropertydoesnothaveacorrespondinginstancevariable,andthebackingstoreforapropertyi

  10. 使用swift开发OSX应用

    选择Swift作为开发语言,保持所有选项框反选,documentextension栏保留为空白。确保“AlsocreateXIBfileforuserinterface”为勾选,然后点Next。需要注意的是,在MacApp中,有大量的类和iOS中都类似,只不过是以NS前缀命名。在applicationDidFinishLaunching方法内,加入以下语句:masterViewController=MasterViewControllerwindow.contentView.addSubviewmaste

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部