キラキラさせるエフェクト作ってみた(その2)
こんにちは、いまさらながらTwitter(otoyasumi)始めてみました、kijimaです。
前回のエントリーに引き続き、キラキラエフェクト(パーティクル、Particleとよく呼ばれますね)を改良していきましょう。
キラキラエフェクト、といっておきながらなんですが、前回もちょろっと触れたように、これ系のエフェクトはじつは少しパラメータをいじるだけでいろんな効果に様変わりするんです!
たとえば、落ちる方向を逆、上向きにしてちょちょっといじれば、「泡」のような効果になったり。
今日は、前回作成したクラスの問題点を洗い出しつつ、汎用的に使いまわすクラスを作るために必要な要素を絞り込みます!(自前じゃないパーティクルライブラリも紹介します)
前回作成のEndlessStar.as~反省点
前回作成したパーティクルクラス(EndlessStar.as)で設定できるパラメータは、こんな種類がありました。
//EndlessStar.as コンストラクタ部分 public function EndlessStar(point_mc:MovieClip, timer:Number, adjust:Number, speed:Number, life:Number, alphaspeed:Number) { ~以下省略
point_mc : パーティクルの発生源となるMovieClip。
はげ親父とぴかーんとひかる光の関係に例えると、はげ親父本体のほうです。
timer : パーティクルを発生させる間隔をミリ秒で設定します。
(処理が重くなる原因かも)
adjust : 値を大きくするほど、point_mcから離れた位置にパーティクルを生成します。
speed : 生成した位置から下に落ちていくスピード。
life : 生成されたパーティクルが消滅するまでのフレーム数。
当然フレームレートの変更によって影響を受けますね。
alphaspeed : 1フレームあたり変化するパーティクルのアルファ値
うーん、こうやって並べてみただけでも突っ込みどころ満載ですね、自分で作っておきながらですが。
まず、それぞれの名前が曖昧すぎて、ぱっと見ただけではどの部分を調整できるかわかりづらい。そのうえ、数値の範囲がパラメータによってバラバラで、300だったり0.1だったり。
もっと突っ込むと、現状ではクラスをnewした瞬間からパーティクルが発生するので、一度発生したら、もう止まりません。ダダ漏れ。なので、たとえばクリックしたときに花火みたいに発生させたりもしたい。
じゃあ、どんな感じに改良したらいいか考えてみる
上に挙げた問題点から、改良したら良い点がだんだん見えてきました。
・パラメータの値をわかりやすい範囲のものに(すべて1が基準とか)
・Timerクラスで描画間隔を制御するんじゃなくて、永続的に描画させたい場合はENTER_FRAMEにまかせて軽量化。
・記述方法を変更。各パラメータはTweener.addTweenのようにObject型で指定する
要はTweenerクラスライブラリみたいな使い方って感じです。
//こんな感じ。 EndlessStar.addStar( base_mc, {time:10, range:2, gravity:3}); /* * base_mc : パーティクルの発生源。すなわちはげ親父の頭。 * time: 消滅するまでの時間 * range : パーティクルの表示範囲 * gravity : 重力すなわち落ちるスピード。マイナスで指定すれば上に昇っていく */ //その他必要に応じて回転、アルファ値を設定できる、といいなぁ。
と、短いですが今日はここまで。
TweenerもStringもMovieClipも、すべて同じ「クラス」
記述方法でTweenerをお手本にしましたが、Tweenerのようにみんなが使っているライブラリの中身って、ソースコードを読むだけでもかなり勉強になります。
同じように、普段何気なく使っているビルトインクラス(Flashに標準装備されているクラス。MovieClipやStringとか)も、使うだけじゃなく中身の構造を知ることでASへの理解度がかなり増すなぁと最近感じています。
Tweener.addTweenというメソッドも、MovieClip.gotoAndPlayも、それぞれクラス内のメソッドなので、構造的には同じなんです。ただ、flaファイル内にコードを書くときにはMovieClipクラスをimportする必要がないので、このことを感覚的に理解するのに時間がかかってしまうんじゃないかと。。僕もAS始めた頃は、まったく別ものだと思ってました。
このことさえ理解してしまえば、ビルトインクラスの拡張もすぐに理解できると思います。
あぁー、話が脱線してしまいました。
次回からは汎用性を考えてEndlessStarという星を連想させるクラス名ではなく、Particleみたいな当たり障りのない名前にします。さよならEndlessStarさん。
ちなみに、あくまで自作のクラス作成が目標なんですが、パーティクル系で有名なクラスライブラリももちろんあります。まだ試していないんですが、なかなか使い勝手が良さそうです。自作クラス作成時の参考にもなりそう。
Flint Particle System(AS3)
Flint Particle System を試してみた : web dimension maker