2009-07-16 11 views
14

Mi chiedo quale strada dovrei andare con ParticleSystem. In questo caso particolare, voglio creare 1-20 piccole esplosioni contemporaneamente ma con posizioni diverse. In questo momento sto creando un nuovo ParticleSystem per ogni esplosione e poi lo rilascio, ma ovviamente questo è molto penalizzante per le prestazioni.Multiple ParticleSystems in cocos2d

La mia domanda è: c'è un modo per creare uno ParticleSystem con più fonti di emissione. In caso contrario, dovrei creare un array di ParticleSystem in init e quindi usarne uno gratuito quando è necessaria un'esplosione? O c'è un altro approccio a cui non ho pensato?

+0

Immagino che questa domanda sia troppo specifica. Chiederò ai creatori di Cocos2d. –

+0

ha risolto tutti? Qual è il modo migliore per farlo? – mm24

risposta

0

Bene, dal momento che non è stato trovato alcun aiuto l'ho risolto in un modo che pensavo fosse il migliore. Ho creato una serie di Partlesystems.

Quando ho bisogno di un'esplosione in diversi punti in una sola volta ho fatto questo fondamentalmente:

Particlesystem * ps = [EnemyExplosions objectAtIndex: EnemyExplosionPointer ++]; ps.position = ExpPoint; [ps resetSystem];

0

Non so se è possibile creare più origini per un singolo ParticleSystem, ma la seconda soluzione (creazione di un array di ParticleSystem) è una buona soluzione generale per risolvere questo tipo di problema. Finché è possibile reinizializzare lo ParticleSystem, si eviteranno qualsiasi altro sovraccarico come i costi di creazione di istanze e la frammentazione della memoria.

1

Uso un sistema di particelle singole per ciascun tipo di effetto. Quindi, uno per un effetto di fuoco, uno per uno scintillio, uno per un'esplosione, ecc.

Io uso una categoria per aggiungere [abilitare] e [disabilitare] i metodi ai sistemi di particelle di base Cocos2D che assomiglia a questo:

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 

Poi quando voglio innescare ho appena impostato la posizione e chiamo abilitare. Il sistema di particelle genera una serie di particelle in base alle impostazioni di inizializzazione. Il sistema può essere attivato più volte in posizioni diverse e le particelle generate in precedenza si comportano correttamente.

La cosa principale da considerare è che sarà necessario un budget di particelle più grande per tenere conto di più istanze di un determinato effetto utilizzando un singolo sistema.

Inoltre, questo funziona per effetti "innescati", come un'esplosione ma potrebbe non funzionare così bene per un effetto a lunga durata come una scia di fumo, non l'ho mai provato.

Mi piace farlo in questo modo perché significa che ho un minor numero di sistemi di particelle da disputare e non devo occuparmi di creare un pool di sistemi di particelle. Lo stesso sistema di particelle fa un buon lavoro nel gestire un pool di particelle, senza bisogno di replicarlo di nuovo a livello di sistema.

Questa tecnica viene utilizzata nella mia app TCG Counter per tutti gli effetti particellari.

4

consultare ccparticleexamples.m nella libreria cocos2d.

Aiuterà a mostrare i diversi tipi di emettitore di particelle.