2009-07-16 87 views
14

我想知道我应该用ParticleSystem去哪条路。在这个特殊情况下,我想同时创建1-20个小爆炸,但是位置不同。现在我正在为每次爆炸创建一个新的ParticleSystem,然后释放它,但这当然是对性能的惩罚。cocos2d中的多粒子系统

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

+0

我想这个问题太具体了。我会问Cocos2d的创造者。 – 2009-07-17 08:27:38

回答

0

那么,因为没有找到任何帮助,我用我认为最好的方式解决了它。我制作了一系列Partlesystems。

当我需要爆炸在一次我basicly这样做几点:

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

0

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

1

我对每种效果使用单个粒子系统。所以,一个用于火灾效果,一个用于闪光灯,一个用于爆炸等。

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

ParticleEnhancement.h

#include "cocos2d.h" 

@interface CCParticleSystem (particleEnhancement) 
-(void)enable; 
-(void)disable; 
@end 

ParticleEnhancement.m

#import "ParticleEnhancement.h" 

@implementation CCParticleSystem (particleEnhancement) 

-(void)enable { 
    active = YES; 
    elapsed = 0.0f; 
} 

-(void)disable { 
    active = NO; 
} 

@end 

然后,当我想触发了,我只是设置的位置,并呼吁实现。粒子系统会根据初始化设置产生一堆粒子。该系统可以在不同位置多次触发,以前生成的粒子将正常运行。

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

此外,这适用于“触发”效果,如爆炸,但可能无法很好地工作,如烟雾线索一样长时间运行,我没有真正测试过。

我喜欢这样做,因为这意味着我有更少的粒子系统可以争吵,我不必处理设置粒子系统池。粒子系统本身在处理粒子池方面做得很好,无需在系统级别再次复制。

此技术正在我的应用程序TCG Counter中用于所有粒子效果。

4

请参阅您的cocos2d库中的ccparticleexamples.m。

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