zoukankan      html  css  js  c++  java
  • cocos2d 粒子效果以及Particle Designer粒子工具的学习

    最近在学习cocos2d中的粒子效果吧,下面就把学到的和大家分享下吧!

    Now!我们先了解下类结构吧

    -- CCParticleSystem(所有粒子系统的父类)

    -- CCParticleSystemPoint、CCParticleSystemQuad (点粒子和方形粒子系统,都继承了CCParticleSystem的所有属性)

        -- CCParticleExplosion       (爆炸粒子效果)

        -- CCParticleFireworks       (烟花粒子效果)

        -- CCParticleFire               (火焰粒子效果)

        -- CCParticleFlower           (花束粒子效果)

        -- CCParticleGalaxy          (星系粒子效果)

        -- CCParticleMeteor          (流星粒子效果)

        -- CCParticleSpiral           (漩涡粒子效果)

        -- CCParticleSnow            (雪粒子效果)

        -- CCParticleSmoke          (烟粒子效果)

        -- CCParticleSun              (太阳粒子效果)

        -- CCParticleRain             (雨粒子效果)

    Ok,基本上也就这么多东西吧。都是cocos2d自带的粒子系统,也是蛮强大的。关键玩的不是这些类,而是粒子系统的属性,N多的属性,想调出漂亮的效果还就靠这些属性了。暂且先不管那些,后面会讲到一个工具(Particle Designer),蛮方便的,省去了不少事。现在我们先理解些东西。

    1、 有关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,一个可视调属性工具。下载地址:http://particledesigner.71squared.com. 这个工具怎么来用就不细说了,打开此工具一目了然。在此说下在项目中怎么来用这个工具导出的文件。

               这个工具属性相关介绍我已经整理了一份 http://www.cnblogs.com/xuling/archive/2012/02/16/2354249.html

    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、 OK接下来可以修改下在工具中不能修改的属性

                      system.positionType = kCCPositionTypeFree;

                      system.autoRemoveOnFinish = YES;//发射完粒子消失后从父节点移除

                      system.position = ccp(100, 100);//粒子发射器位置

    需要注意一点的是 positionType 这个属性,翻看Himi 的教程,里面有个讲到粒子会随精灵的位置变动而变动。这都取决于这个属性的设定。有三个值:

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

    kCCPositionTypeGrouped 这个和上边的产生效果一样(实验得到的结果),区别在于这个是粒子随发射器移动而移动

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

    4、 最后我们再说个在测试中遇到的问题, 当要显示粒子效果时,在界面上会轻微的卡下,这是粒子在加载贴图资源。这个问题不解决可能会使游戏变得不流畅了。在这里我们可以使用预加载机制,这个方法也是跟教程学的,嘿嘿!学习无处不在嘛!

    首先,我们在游戏进入的场景的初始化init中加入 [self preloadParticleEffect];

                    - (void)preloadParticleEffect

                    {

                            [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"fx-explosion.plist"];

                   }

                    因为particleWithFile方法是以自动释放的方式初始化的粒子,因此不用关心他们的内存释放问题。

                    当他们释放掉以后他们的贴图会保留再缓存(CCTextureCache)中,因此解决了粒子显示时及时加载贴图的问题。

                    如果"fx-explosion.plist"里面没有嵌贴图,那就用[[CCTextureCachesharedTextureCache] addImage:@"fire.png"];这个方式先把贴图加入缓存啦。

                 到此为止,算是学完了,乱七八糟的扯了一大堆,有用的也就是后面这段, 这也是为了理解深刻点嘛!哈哈 ,怎么用说完了,调效果那就需要大家自己用工具调了,貌似不 那么容易 。。。大家加油吧! 有什么要补充的提出来哈,大家一起学习嘛, 继续忙了, 源码链接就放下面了 。。。      

  • 相关阅读:
    DbEntry——学习笔记(二)
    新的开始
    Jquery Dialog的使用
    使用System.Net.Mail.MailMessage 来发送邮件
    三层架构中的"业务逻辑层"
    Ajax请求中的async:false/true的作用
    1
    招聘会项目的开发
    操作全角与半角(C#)
    sqlserver把数据库中的表完整的复制到另一个数据库
  • 原文地址:https://www.cnblogs.com/zhangyuhang3/p/6868248.html
Copyright © 2011-2022 走看看