XNAメモ – 小規模な2Dパーティクルエフェクトの実装2

Posted: 2012年2月9日 カテゴリー: プログラミングメモ, XNA, XNAメモ
タグ:, , , , , , , ,

今回は前回作ったパーティクルシステムを少しだけ変更して、作製するパーティクルの向きを限定します。

*注意: 前回の記事を書いた後に気が付きましたが、ParticleEmitterクラスのEmmit()メソッドは、本来Emit()という名前の筈なのに間違えてました。申し訳ありませんが、気になる方は修正してください。

では実装にもどります。まず、ParticleEmitterクラスのEmit()メソッドの引数に、角度の最低値と最大値を追加します。パーティクルの角度を獲得する時に、こに2つのパラメータを使用してランダムの角度を獲得するように変更します(実質パラメーターと一行を変更するだけです)


public void Emit(Texture2D tex, Vector2 pos, int minAngle, int maxAngle, float scale,
float shrinkRate, float duration, int amount, int maxSpeed, Color colour)
{
Particle p;

for (int i = 0; i < amount; i++)
{
// ランダムな角度を獲得する
int angle = m_rand.Next(minAngle, maxAngle);

// ランダムな速度を獲得する
float speed = m_rand.Next(1, maxSpeed);

// 新しいパーティクルを作る
p = new Particle(tex, pos, speed, angle, scale, shrinkRate, duration, colour);

// パーティクルを足す
m_particles.Add(p);
}
}

後は、Emit()を呼ぶときに少し変更するだけです。


// スペースキーが押されたら
if (Input.IsPressed(Keys.Space))
{
// パーティクルを作る
emitter.Emit(particleTex, new Vector2(300, 300), 30, 80, 0.5f, 1.0f, 1.5f, 100, 200, Color.Gold);
}

if (Input.IsPressed(Keys.Z))
{
float scale = 0.5f;
float shrink = 0.5f;
int speed = 600;
int min = 150;
int max = 230;
Vector2 pos = new Vector2(350, 200);
emitter.Emit(particleTex, pos, min, max, scale, shrink, 1.0f, 40, speed, Color.Salmon);
emitter.Emit(particleTex, pos, min, max, scale, shrink, 2.5f, 40, speed, Color.Pink);
emitter.Emit(particleTex, pos, min, max, scale, shrink, 2.0f, 40, speed, Color.Crimson);
}

変更後の動画:

以上です。何か今回は凄く短くなってしまいましたが、パーティクルシステム関係のメモはまだ最低1回続く予定です。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中