您的位置:首页 > 移动开发 > Cocos引擎

IOS cocos2d学习笔记-<六>CCParticalSystem粒子效果

2013-08-08 22:03 519 查看
(本文写作基于千锋3g学院提供的第三季讲授视频编写,更多资料和资源下载地址请看笔记扉页:传送门

这一讲很有意思,听着讲师说“离子离子”的有点不明觉厉的感觉,但你细心一下会发觉他其实在说“粒子”

好吧,有意思的地方不在这里,而是在于对于我来说有点高端的东西。

粒子效果,顾名思义,就是很多张细小的图片通过一些不规则的运动形成的效果,这些效果的应用不仅增加了游戏的体现性,还增加了机子的性能负担...

试想让你下一场雪贴了上百张小图片在屏幕上缓缓下降,这得创建多少个精灵对象,这得耗上多少内存?

所以!一个好的粒子效果方法是很必要的,于是我们用到cocos2d的一个封装好的类进行操作。

初学者只需要掌握使用方法就好了,程度好一点的话可以进去看一看其结构,甚至可以写属于自己的粒子效果,也不是很难的事。

这一讲,有两个关键类:CCParticleSystemCCTextureCache

CCParticleSystem(粒子系统)

在视频里面是讲得比较多的,我们主要使用它的子类来实现粒子效果

首先,CCParticleSystem有两个子类分别是CCParticleSystemQuadCCParticleSystemPoint

这两个类是两种不同的绘图方式,CCParticleSystem是合理利用新GPU进行绘图的比较先进的类别,在ARMv7及以后都使用这个

比较旧的ARMv6使用CCParticleSystemPoint

这里有个宏:ARCH_OPTIMAL_PARTICLE_SYSTEM,其代码如下:

#if defined(__ARM_NEON__) || defined(__MAC_OS_X_VERSION_MAX_ALLOWED) || TARGET_IPHONE_SIMULATOR
#define ARCH_OPTIMAL_PARTICLE_SYSTEM CCParticleSystemQuad

// ARMv6 use "Point" particle
#elif __arm__
#define ARCH_OPTIMAL_PARTICLE_SYSTEM CCParticleSystemPoint
#else
#error(unknown architecture)
#endif

作用是根据机器硬件决定使用哪一个类,保险点,用宏吧。

好,下面就是具体的粒子效果类列举:



他们都继承于上文提到的CCParticleSystemQuad

由于他们的老祖宗都是CCNode,那这就意味着你只需揪出一个类来创建一个实例然后往场景里面+(void) addChild:(id) 就能看见这个粒子效果了。

但我们看到的只有块一块的东西,我们会想到需要对这个实例进行各种的设置,达到我们想要的效果,除了设置位置(Position)、大小(Scale)、角度(Angle)等等的常量外,有一个重要的属性就是文章开头提到的纹理(CCTextureCache):

CCTextureCache(纹理缓冲存储器)

这个东西有点牛,这个东西就是让这么多图片畅顺跑起来的关键。

CCTextureCache类跟导演一样,使用的通常是单例模式,随时调用进行操作。

下面是CCTextureCache常用的方法:

CCParticleSystem *system = nil;
system = [CCParticleMeteor node];
// 实例化雪花粒子效果
CCTexture2D *t = [[CCTextureCache sharedTextureCache] addImage:@"ice1.png"];
// 首先获取纹理缓冲存储器的单例加入图片加工,返回的是一个CCTexture2D类型的指针

[system setTexture:t];
// 把CCTexture2D类对象作为纹理加入到粒子系统中


我们可以把这CCTextureCache类当做一个厂房,我们提供一张图片给它,然后它将会把这图片进行一系列处理之后得到粒子系统(CCParticleSystem)所需的产品(CCTexture2D)并提供给粒子系统配上适当的图。

这样我们的粒子效果中每个粒子都会有图片显示的纹理在上面,而不是一块一块的矩形了。

CCParticleSystemQuad

好吧,是的,又是它。因为文章的思维走完了才发现把它给忘记了,我只说它的其中一个常用的自定义粒子效果方法——

使用plist文件来创建粒子效果,这是在CCParticleSystem里面的方法:

+ (id) particleWIthFile: (NSString *) plistFile;

那么这个plist文件在哪里来呢?视频里面骚骚打了一下广告:用ParticleDesigner-粒子设计器。(要给钱的)

有试用期,有空试试吧,下载地址:http://www.71squared.com/

当然自己写也可以,当然,当你打开源代码里面的plist文件看一下就会有所觉悟,这个要花上一定的时间了....

这里提供一个比较全面的转发说明文章:http://blog.csdn.net/youngsblog/article/details/9842457 

另外,离子效果有两个比较重要的设置:

+ (void) setPositionType: (kCCPositionType)

取决于这个属性的设定。有三个值:

kCCPositionTypeRelative  相对模式, 粒子系统会随精灵移动而移动,可用于制作角色身上特效等等

举个栗子:一个角色add进了场景里面,他身上add了一个粒子系统,这个粒子系统会一直跟着这个角色,但掉出来的粒子不会跟着一起走。

kCCPositionTypeGrouped 这个和上边的产生效果一样(实验得到的结果),区别在于这个是掉出来的粒子会随粒子系统移动而移动

kCCPositionTypeFree      自由模式, 不会随粒子系统移动而移动(可产生火焰、蒸汽等效果)

+ (void) setAutoRemoveOnFinish:(BOOL)

这个很自然地方法名字告诉你了作用了,记得不需要的时候把这个设为yes吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息