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.
Immagino che questa domanda sia troppo specifica. Chiederò ai creatori di Cocos2d. –
ha risolto tutti? Qual è il modo migliore per farlo? – mm24