Cocos2d particle builder教程

2015年02月27日 12:04 0 点赞 0 评论 更新于 2025-11-21 16:30

在学习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导出文件的步骤

  1. 保存文件:点击工具中的“SAVE”,将文件保存为.plist格式,然后导入到项目中。
  2. 实例化粒子对象:必须使用ARCH_OPTIMAL_PARTICLE_SYSTEM来初始化粒子对象,如果使用父类CCParticleSystem将无法看到效果。示例代码如下:
    CCParticleSystem * system;
    system = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"fx-explosion.plist"];
    [self addChild:system z:1 tag:1];
    
  3. 修改属性:可以修改在工具中无法修改的属性,例如:

    system.positionType = kCCPositionTypeFree;
    system.autoRemoveOnFinish = YES; // 发射完粒子消失后从父节点移除
    system.position = ccp(100, 100); // 粒子发射器位置
    

    这里需要注意positionType属性,它有三个值:

    • kCCPositionTypeRelative:相对模式,粒子发射器会随精灵移动而移动,可用于制作角色身上的特效。
    • kCCPositionTypeGrouped:和kCCPositionTypeRelative产生的效果类似,区别在于粒子随发射器移动而移动。
    • kCCPositionTypeFree:自由模式,不会随粒子节点移动而移动,可产生火焰、蒸汽等效果。
  4. 解决加载贴图卡顿问题:在测试中,当显示粒子效果时,界面可能会轻微卡顿,这是因为粒子在加载贴图资源。为了解决这个问题,可以使用预加载机制。具体做法是,在游戏进入的场景的初始化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

作者信息

boke

boke

共发布了 3994 篇文章