Domanda Multiple ParticleSystems in cocos2d


Mi chiedo su quale strada dovrei andare 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 rilasciarlo, ma ovviamente questo è molto penalizzante per la performance.

La mia domanda è: c'è un modo per crearne uno ParticleSystem con più fonti di emissione. Se no dovrei creare un array di ParticleSystem in init e poi ne usi uno libero quando è necessaria un'esplosione? O c'è un altro approccio a cui non ho pensato?


14
2017-07-16 15:12


origine


risposte:


fai riferimento a ccparticleexamples.m nella tua libreria cocos2d.

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


4
2017-11-26 13:11



Io uso un singolo sistema di particelle per ogni tipo di effetto. Quindi, uno per un effetto fuoco, uno per una scintilla, uno per un'esplosione, ecc.

Uso una categoria per aggiungere i metodi [abilita] e [disabilita] ai sistemi di particelle Cocos2D di base 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

Quindi, quando voglio attivarlo, imposto la posizione e l'abilitazione alla chiamata. 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 particellare più ampio per tenere conto di più istanze di un dato 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 corsa 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 Contatore TCG per tutti gli effetti particellari.


1
2018-04-27 17:01



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

Quando ho avuto bisogno di un'esplosione in più punti contemporaneamente ho fatto questo:

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


0
2017-07-24 06:07



Non so se è possibile creare più fonti per un singolo ParticleSystem, ma la tua seconda soluzione (creando un array di ParticleSystem) è una buona soluzione generale per risolvere questo tipo di problema. Finché è possibile reinizializzare il ParticleSystem, eviterete qualsiasi altro sovraccarico come i costi di istanziazione e la frammentazione della memoria.


0
2018-02-26 01:35