2012-01-10 12 views
2

AndEngineのパーティクルシステムを使用してスプラッシュを作成したいと考えています(スプラッシュ水など)。AndEngineパーティクルシステム

私はパーティクルシステムの例をチェックしましたが、パーティクルシステムを使用して水のスプラッシュエフェクトを作成するために何をする必要があるかはわかりません。

アイデアはありますか?

+1

http://gamedev.stackexchange.com/は良い選択だったかもしれ? – TryTryAgain

+0

ありがとう、病気もあります。私たちにはもっと多くのユーザーがいるようですが、ここで助けてください。 –

+0

実際、ここにはより多くのトラフィックがあります。二重の投稿やリンクを行っても良いとは限りません。私はそれがここにどのように行くのかを見て、それから何も起こらなければそれを移行させてください。 – TryTryAgain

答えて

3

私はウォータースプラッシュシミュレーションアルゴリズムについて知らないので、私は思うことをしますが、実際に見えるように修正する必要があります。

2Dのウォータースプラッシュアニメーションは、単一の場所から多数の小さな水滴を作成し、それぞれを異なる速度で最初の速度で送信します。その後、各ウォータードロップが減速してフェードアウトします。

public ParticleSystem createParticleSystem(final TextureRegion waterDropTextureRegion) { 
    //X & Y for the particles to spawn at. 
    final float particlesXSpawn = 400; 
    final float particlesYSpawn = 300; 

    //Max & min rate are the maximum particles per second and the minimum particles per second. 
    final float maxRate = 10; 
    final float minRate = 5; 

    //This variable determines the maximum particles in the particle system. 
    final int maxParticles = 100; 

    //Particle emitter which will set all of the particles at a ertain point when they are initialized. 
    final PointParticleEmitter pointParticleEmtitter = new PointParticleEmitter(particlesXSpawn, particlesYSpawn); 

    //Creating the particle system. 
    final ParticleSystem particleSystem = new ParticleSystem(pointParticleEmtitter, maxRate, minRate, maxParticles, waterDropTextureRegion); 

    //And now, lets create the initiallizers and modifiers. 
    //Velocity initiallizer - will pick a random velocity from -20 to 20 on the x & y axes. Play around with this value. 
    particleSystem.addParticleInitializer(new VelocityInitializer(-20, 20, -20, 20)); 

    //Acceleration initializer - gives all the particles the earth gravity (so they accelerate down). 
    particleSystem.addParticleInitializer(new GravityInitializer()); 

    //And now, adding an alpha modifier, so particles slowly fade out. This makes a particle go from alpha = 1 to alpha = 0 in 3 seconds, starting exactly when the particle is spawned. 
    particleSystem.addParticleModifier(new AlphaModifier(1, 0, 0, 3)); 

    //Lastly, expire modifier. Make particles die after 3 seconds - their alpha reached 0. 
    particleSystem.addParticleModifier(new ExpireModifier(3)); 

    return particleSystem; 
} 

私はそれをテストしていませんが、私はそれが動作すると思う:

これを試してみてください。値を使って試して、リアリズム的に見えるアニメーションを探してみてください。

このメソッドは、各粒子の準備ができているテクスチャ領域である引数を受け取ります。あなたのケースでは、水滴になると思います。あなたは自分のシーンに添付し、このメソッドを呼び出すとParticleSystemを取得した後

final ParticleSystem particleSystem = createParticleSystem(...); 
scene.attachChild(particleSystem); 
+0

ありがとうございました。また、PNGは一滴の水でなければならないのでしょうか? –

+0

さて、ちょうど水滴。 – Jong

+0

ニースの解決策。 ParticleSystemのmax/minRateが反転していることに気がつきました。 AlphaModifierのパラメータと同じです。また、GLES2では、インタイヤライザークラスには粒子のインフィックスがあります。私はそれが助けてくれることを願っています。 –