2009-07-16 83 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。

這將有助於顯示不同類型的粒子發射器。