Cocos2d particle builder教程
在学习Cocos2d中的粒子效果过程中,我将把所学内容分享给大家。
类结构了解
在Cocos2d中,粒子系统有着清晰的类结构:
- CCParticleSystem:作为所有粒子系统的父类,是整个粒子系统体系的基础。
- CCParticleSystemPoint和CCParticleSystemQuad:点粒子和方形粒子系统,它们继承了CCParticleSystem的所有属性。在此基础上,又衍生出了多种具体的粒子效果类:
- CCParticleExplosion:爆炸粒子效果。
- CCParticleFireworks:烟花粒子效果。
- CCParticleFire:火焰粒子效果。
- CCParticleFlower:花束粒子效果。
- CCParticleGalaxy:星系粒子效果。
- CCParticleMeteor:流星粒子效果。
- CCParticleSpiral:漩涡粒子效果。
- CCParticleSnow:雪粒子效果。
- CCParticleSmoke:烟粒子效果。
- CCParticleSun:太阳粒子效果。
- CCParticleRain:雨粒子效果。
这些都是Cocos2d自带的粒子系统,功能十分强大。不过,关键在于粒子系统的属性,众多的属性是调出漂亮效果的关键。后面会介绍一个方便的工具——Particle Designer,它能省去不少麻烦。现在,我们先理解一些基础内容。
相关要点分析
1. 有关CCParticleSystemPoint和CCParticleSystemQuad
大部分粒子系统都会继承CCParticleSystemPoint或CCParticleSystemQuad,下面来分析如何选择:
- CCParticleSystemPoint:点粒子系统,在1、2代机器上消耗内存较少,运行速度较快,但在3代以后的机器上性能不佳。
- CCParticleSystemQuad:方形粒子系统,在3代以后的机器上运行速度较快,但会消耗更多的内存和CPU。
可以看出,两者各有利弊。我们可以在代码中根据不同的机器来选择最佳的粒子系统,使用预处理器ARCH_OPTIMAL_PARTICLE_SYSTEM来定义粒子系统,在代码编译过程中,它会自动根据机型选择合适的粒子系统。例如:
@interface CCParticleExplosion : ARCH_OPTIMAL_PARTICLE_SYSTEM
2. 有关粒子贴图
粒子贴图的大小必须小于64x64,且越小越好。有两种处理贴图的方式:
- 嵌入到Particle Designer中:这种方式的缺点是修改贴图不方便。
- 导入工程中:使用
self.texture = [[CCTextureCache sharedTextureCache] addImage:particleFile]来导入贴图。
粒子工具Particle Designer的使用
接下来,我们学习粒子工具Particle Designer,它是一个可视化的属性调整工具。下载地址为:http://particledesigner.71squared.com。该工具的使用方法比较直观,打开工具后即可一目了然,这里不再详细说明。下面介绍在项目中如何使用这个工具导出的文件。
在项目中使用Particle Designer导出文件的步骤
- 保存文件:点击工具中的“SAVE”,将文件保存为.plist格式,然后导入到项目中。
- 实例化粒子对象:必须使用
ARCH_OPTIMAL_PARTICLE_SYSTEM来初始化粒子对象,如果使用父类CCParticleSystem将无法看到效果。示例代码如下:CCParticleSystem * system; system = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"fx-explosion.plist"]; [self addChild:system z:1 tag:1]; 修改属性:可以修改在工具中无法修改的属性,例如:
system.positionType = kCCPositionTypeFree; system.autoRemoveOnFinish = YES; // 发射完粒子消失后从父节点移除 system.position = ccp(100, 100); // 粒子发射器位置这里需要注意
positionType属性,它有三个值:- kCCPositionTypeRelative:相对模式,粒子发射器会随精灵移动而移动,可用于制作角色身上的特效。
- kCCPositionTypeGrouped:和
kCCPositionTypeRelative产生的效果类似,区别在于粒子随发射器移动而移动。 - kCCPositionTypeFree:自由模式,不会随粒子节点移动而移动,可产生火焰、蒸汽等效果。
解决加载贴图卡顿问题:在测试中,当显示粒子效果时,界面可能会轻微卡顿,这是因为粒子在加载贴图资源。为了解决这个问题,可以使用预加载机制。具体做法是,在游戏进入的场景的初始化
init中加入[self preloadParticleEffect];,代码如下:- (void)preloadParticleEffect { [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"fx-explosion.plist"]; }由于
particleWithFile方法是以自动释放的方式初始化的粒子,因此无需关心它们的内存释放问题。当它们释放后,贴图会保留在缓存(CCTextureCache)中,从而解决了粒子显示时及时加载贴图的问题。如果“fx-explosion.plist”里面没有嵌入贴图,可以使用[[CCTextureCache sharedTextureCache] addImage:@"fire.png"];的方式先将贴图加入缓存。
到此为止,我们学习了Cocos2d中粒子系统的相关知识和Particle Designer工具的使用。如何调整出理想的效果还需要大家自己使用工具进行尝试。源码链接:/Files/xuling/ParticleDemo.zip。如果大家有需要补充的内容,欢迎提出,让我们一起学习。
——Juner's