2012-03-14 5 views
5

nel mio gioco io usoLibGDX: scala delle particelle

static final float FRUSTUM_WIDTH = 10; 
static final float FRUSTUM_HEIGHT = 15; 

Così quando disegno le particelle prendono l'intero schermo e sono enormi! Quindi, come ridimensionarli per adattarli alle mie esigenze?

// Pew Labs

risposta

5

O si utilizza l'editor di particelle (ad essere onesti non credo è una buona idea per dimensionare le particelle, come hai detto le particelle non diventeranno troppo piccole (per qualsiasi altra cosa lo raccomando veramente)) o semplicemente apri il file dell'effetto particella. Dovrebbe essere generato dall'editor o copiarlo dagli esempi. In questo file cercare i campi sottostanti:

- Scale - 
lowMin: 0.0 
lowMax: 0.0 
highMin: 0.6 
highMax: 0.6 
relative: false 
scalingCount: 1 
scaling0: 1.0 
timelineCount: 1 
timeline0: 0.0 

Regolare il highMin e highMax come necessario.

+0

Questo e tutti gli altri non funzionano con l'ultima libreria, nessun aiuto? – lacas

+0

Personalmente, non ho usato libgdx in un momento, mi spiace :(. – dom

25
ParticleEffect pe = new ParticleEffect(); 
    pe.load(Gdx.files.internal("data/particle/particle.p"), Gdx.files.internal("data/particle")); 
    pe.setPosition(x, y); 

    float pScale = 0.2f; 

    float scaling = pe.getEmitters().get(0).getScale().getHighMax(); 
    pe.getEmitters().get(0).getScale().setHigh(scaling * pScale); 

    scaling = pe.getEmitters().get(0).getScale().getLowMax(); 
    pe.getEmitters().get(0).getScale().setLow(scaling * pScale); 

    scaling = pe.getEmitters().get(0).getVelocity().getHighMax(); 
    pe.getEmitters().get(0).getVelocity().setHigh(scaling * pScale); 

    scaling = pe.getEmitters().get(0).getVelocity().getLowMax(); 
    pe.getEmitters().get(0).getVelocity().setLow(scaling * pScale); 
+1

Questo è davvero utile, grazie! –

2

ho usato lo stesso approccio di Victor, ma che cosa ha funzionato per me:

ParticleEffect effect = new ParticleEffect(); 
    effect.load(Gdx.files.internal("particle/version1.p"), Gdx.files.internal("particle")); 
    effect.setPosition(x, .y); 
    float pScale = 0.02f; 
    float scaling; 
    Array<ParticleEmitter> emitters = effect.getEmitters(); 
    for (ParticleEmitter e : emitters) { 

     scaling = e.getScale().getHighMax(); 
     e.getScale().setHigh(scaling * pScale); 

     scaling = e.getScale().getLowMax(); 
     e.getScale().setLow(scaling * pScale); 

     scaling = e.getVelocity().getHighMax(); 
     e.getVelocity().setHigh(scaling * pScale); 

     scaling = e.getVelocity().getLowMax(); 
     e.getVelocity().setLow(scaling * pScale); 

     scaling = e.getSpawnHeight().getHighMax(); 
     e.getSpawnHeight().setHighMax(scaling * pScale); 

     scaling = e.getSpawnHeight().getLowMax(); 
     e.getSpawnHeight().setLowMax(scaling * pScale); 

     scaling = e.getSpawnHeight().getHighMin(); 
     e.getSpawnHeight().setHighMin(scaling * pScale); 

     scaling = e.getSpawnHeight().getLowMin(); 
     e.getSpawnHeight().setLowMin(scaling * pScale); 

     scaling = e.getSpawnWidth().getHighMax(); 
     e.getSpawnWidth().setHighMax(scaling * pScale); 

     scaling = e.getSpawnWidth().getLowMax(); 
     e.getSpawnWidth().setLowMax(scaling * pScale); 

     scaling = e.getSpawnWidth().getHighMin(); 
     e.getSpawnWidth().setHighMin(scaling * pScale); 

     scaling = e.getSpawnWidth().getLowMin(); 
     e.getSpawnWidth().setLowMin(scaling * pScale); 

     scaling = e.getXOffsetValue().getLowMax(); 
     e.getXOffsetValue().setLowMax(scaling * pScale); 

     scaling = e.getXOffsetValue().getLowMin(); 
     e.getXOffsetValue().setLowMin(scaling * pScale); 

     scaling = e.getYOffsetValue().getLowMax(); 
     e.getYOffsetValue().setLowMax(scaling * pScale); 

     scaling = e.getYOffsetValue().getLowMin(); 
     e.getYOffsetValue().setLowMin(scaling * pScale); 
    } 
    effect.start();