14

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

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

4

4 回答 4

4

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

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

于 2010-11-26T13:11:27.157 回答
1

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

我使用一个类别将 [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中用于所有粒子效果。

于 2010-04-27T17:01:18.457 回答
0

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

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

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

于 2009-07-24T06:07:49.263 回答
0

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

于 2010-02-26T01:35:55.247 回答