- 2010年01月05日 (火)
- Tweet
Stardustを使ってAS3のパーティクル表現を学ぶ Vol.02
AS3 のパーティクルエンジンである Stardust (スターダスト)についてチュートリアル記事、第2弾目。
前回の記事では、Stardust は「イニシャライザー」と「アクション」がカスタマイズの鍵ということに触れました。今回の記事ではそれらの役割について説明します。まずは、視覚的にわかりやすいデモを作りましたので、こちらをご覧ください。(右側のパネルで各種パラメーターを調整し、左側で表示されているパーティクルの演出をカスタマイズすることができます)
以下、詳細を説明します。
イニシャライザーとは
イニシャライザーとは、パーティクルの初期値を設定するクラスとなります。EmitterクラスのaddInitialize()メソッドを使って、エミッターにイニシャライザーを追加していきます。
デモでは、以下のパラメーターをイニシャライザーとしてカスタマイズできるようにしています。
- パーティクルの開始スケール値 (Scale クラス)
- パーティクルの元となるスプライトの種類 (DisplayObjectClass クラス)
- パーティクルの生存値 (Life クラス)
[図1] イニシャライザーで、パーティクル発生時の透明度やスケール値にランダム性を持たせた例
イニシャライザーの種類紹介
他にも様々なイニシャライザーがありますが、一部の代表的な2Dのイニシャライザーを紹介しておきます。
- Life : パーティクルの生存値(アクションでAgeとDaethLifeを有効にする必要あり)
- Position : パーティクルの発生位置を調整
- Scale : パーティクルの開始スケール値を調整
- Alpha : パーティクルの開始透明度を調整
- DisplayObjectClass : パーティクルの元となるスプライトの種類
- Rotation : パーティクルの開始角度を調整
アクションとは
アクションとは、パーティクル発生後にどのような動きをするかを設定するクラスとなります。EmitterクラスのaddAction()メソッドを使って、エミッターにアクションを追加していきます。
デモでは、以下のパラメーターをアクションとしてカスタマイズできるようにしています。
- 加速値(Accelerate クラス)
- スケール変化 (ScaleCurve クラス)
- 重力の速度 (Gravity クラス)
[図2] アクションを加えて、パーティクルに重力やスケール変化を適用させた例
アクションの種類紹介
他にも様々なアクションがありますが、一部の代表的な2Dのアクションを紹介しておきます。
- Age : 寿命を有効化
- DeathLife : 死滅を有効化
- AlphaCurve : 透明度変化を有効化
- ScaleCurve : スケール変化を有効化
- Move : 移動を有効化
- Accelerate : 加速を有効化
- Damping : 減速を有効化
- Gravity : 重力の速度を有効化
- DeathZone : パーティクルが死滅する領域を指定
- AbsoluteDrift : 動きのランダム方向を指定(雨粒のように左右にぶれるような動き)
- Oriented : Velocityに関係する回転運動を指定
まとめ
Stardustを扱う上で、どのようなイニシャライザーやアクションがあるかを把握することが、表現の自由度を高める効果的な学習ステップになると思います。公式サンプルのソースコードは全てダウンロード可能ですので、どのようなクラスを用いて動かすかはサンプルコードを参考にすればわかりやすいと思います。
なお、本記事で紹介しているイニシャライザーとアクションはStardustのほんの一部ですので、興味のある方は公式ドキュメントなどを参考にしらべてみるといいかもしれません。
次回は任意のタイミングでパーティクルをON/OFFする方法について説明します。
続く…
2010年01月06日(水) 00:19
Wow, you are fast at writing tutorials. Volume 2 already!? Thanks a lot. You’ve given me so much motivation to keep working on Stardust 🙂
2010年04月01日(木) 02:14
いつも拝見させていただいてます。
突然の質問すみません。StarDustを練習したいと思いどうしても分からず質問させてください。
addInitializerで
addInitializer(new Life(new UniformRandom(2,100)));
addInitializer(new Velocity(new LazySectorZone(2, 50)));
など初期値を設定すると思いますが、その際に
UniformRandom(center,radius)の意味や
LazySectorZone(radius,radiusvars)の数値の意味が分からないのです
例えば上記の
addInitializer(new Life(new UniformRandom(2,2)));
と設定した場合はcenterが2というのはどういった意味でradius2はどこまでの範囲をさしているのか?
またaddInitializer(new Velocity(new LazySectorZone(2, 50)));
ではVelocityは速度っぽい感じですが、LazySectorZone(2, 50)のradius2でradiusvars50ってどんな範囲の意味を指しているのか不明。
上記のシミュレーターで例えばLIFEを10くらいに下げてもVelocityを最大値まで上げるとパーティクルの生存範囲??が広くなっているようにも感じちょっと混乱しています。
なんかものすごい説明下手で申し訳ないのですがご教授していただけたら幸いです。