2013-02-12 18 views
5

私はlibgdxと私のAndroidデバイス上で火を描く:libgdx particleEffect回転

ParticleEffect effect; 
ParticleEffectPool fireEffectPool; 
Array<PooledEffect> effects = new Array<PooledEffect>(); 

@Override 
public void create() 
{ 
    ... 
    effect = new ParticleEffect(); 
    effect.load(Gdx.files.internal("particles/fire01.p"), Gdx.files.internal("image")); 
    effect.setFlip(true, false); 
    fireEffectPool = new ParticleEffectPool(effect, 1000, 3000); 

    PooledEffect myEffect = fireEffectPool.obtain(); 
    myEffect.setPosition(200, 400); 
    effects.add(myEffect); 
    ... 
} 

私はスピードを設定したり、プログラムで私の効果を拡大縮小、回転させることはできますか?

答えて

4

はい。 ParticleEmitterTestをチェックアウト:https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ParticleEmitterTest.java

あなただけParticleEmitterを取得する必要があります。

emitter = effect.getEmitters().first(); 
emitter.getScale().setHigh(5, 20); 
+1

スケールとスピードは問題ありませんが、回転はどうですか?パーティクルエフェクト全体を簡単に回転させる方法はありません。 –

+1

@ScubaSteve、それは遅すぎるかもしれませんが、 'emitter.getAngle()。setHigh(angle);を使うことができます。 emitter.getAngle()。setLow(angle); ' – Leo

4

私はベース http://badlogicgames.com/forum/viewtopic.php?f=11&t=7060#p32607

そして追加するなど、このコードを使用して、パーティクルエフェクトの回転問題への解決策を見つけました効果の振幅を保存するための小さな変化。それが役に立てば幸い。

public void rotateBy(float amountInDegrees) { 
    Array<ParticleEmitter> emitters = particleEffect.getEmitters();   
     for (int i = 0; i < emitters.size; i++) {       
      ScaledNumericValue val = emitters.get(i).getAngle(); 
      float amplitude = (val.getHighMax() - val.getHighMin())/2f; 
      float h1 = amountInDegrees + amplitude;            
      float h2 = amountInDegrees - amplitude;            
      val.setHigh(h1, h2);           
      val.setLow(amountInDegrees);  
     } 
    } 
} 
+0

'Low'と同じ振幅計算をしてはいけませんか? – Sebastian