【问题标题】:Multiple ParticleSystems in cocos2dcocos2d 中的多粒子系统
【发布时间】:2010-11-11 10:03:39
【问题描述】:

我想知道我应该走哪条路ParticleSystem。在这种特殊情况下,我想同时创建 1-20 个小爆炸,但位置不同。现在我正在为每次爆炸创建一个新的ParticleSystem 然后释放它,但这当然对性能非常不利。

我的问题是:有没有办法创建一个具有多个发射源的ParticleSystem。如果不是,我应该在 init 中创建一个ParticleSystem 数组,然后在需要爆炸时使用一个免费的数组吗?还是有其他我没有想到的方法?

【问题讨论】:

  • 我猜这个问题太具体了。我会问 Cocos2d 的创建者。
  • 大家解决了吗?最好的方法是什么?

标签: optimization cocos2d-iphone


【解决方案1】:

在你的 cocos2d 库中引用 ccparticleexamples.m。

这将有助于展示不同类型的粒子发射器。

【讨论】:

    【解决方案2】:

    我对每种效果都使用一个粒子系统。因此,一种用于火焰效果,一种用于闪光,一种用于爆炸,等等。

    我使用一个类别将 [enable] 和 [disable] 方法添加到基本的 Cocos2D 粒子系统,如下所示:

    粒子增强.h

    #include "cocos2d.h"
    
    @interface CCParticleSystem (particleEnhancement)
    -(void)enable;
    -(void)disable;
    @end
    

    粒子增强.m

    #import "ParticleEnhancement.h"
    
    @implementation CCParticleSystem (particleEnhancement)
    
    -(void)enable {
      active = YES;
      elapsed = 0.0f;
    }
    
    -(void)disable {
      active = NO;
    }
    
    @end
    

    然后当我想触发它​​时,我只需设置位置并调用启用。粒子系统将根据初始化设置生成一堆粒子。系统可以在不同位置多次触发,之前生成的粒子会正常运行。

    要考虑的主要问题是,您将需要更大的粒子预算来解决使用单个系统的给定效果的多个实例。

    此外,这适用于“触发”效果,如爆炸,但可能不适用于长时间运行的效果,如烟道,我还没有真正测试过。

    我喜欢这样做,因为这意味着我需要处理的粒子系统更少,而且我不必处理设置粒子系统池的问题。粒子系统本身可以很好地处理粒子池,无需在系统级别再次复制。

    我的应用程序TCG Counter 中使用了这项技术来实现所有粒子效果。

    【讨论】:

      【解决方案3】:

      好吧,由于找不到任何帮助,我以我认为最好的方式解决了它。我制作了一系列 Partlesystems。

      当我需要同时在多个点爆炸时,我基本上是这样做的:

      ParticleSystem *ps = [EnemyExplosions objectAtIndex:EnemyExplosionPointer++]; ps.position = ExpPoint; [ps 重置系统];

      【讨论】:

        【解决方案4】:

        我不知道您是否可以为单个ParticleSystem 创建多个源,但您的第二个解决方案(创建ParticleSystem 的数组)是解决此类问题的一个很好的通用解决方案。只要您可以重新初始化ParticleSystem,您就可以避免任何其他开销,例如实例化成本和内存碎片。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-28
          相关资源
          最近更新 更多