BitmapData習作 残像拳
スト2等でよくみるスーパーコンボ時のキャラクターの青い残像エフェクト。現在作っているゲームで あのようなイメージの残像を表現したいなあと、専用のエフェクトクラスを作成。
簡単な残像表示を行うものだけのたいしたものでもありませんが、サンプルとクラスを置いておきます
要FlashPlayer8
残像表示を行いたいMC(ムービークリップ)と残像用のパラメータを指定すると残像エフェクト表示を開始します。
作ってはみたものの使い勝手はややいまいちで、特定の状況下の場合は表示が変になったり使用することができなかったりします。
上段しらた丸が通常使用。
中段プリンちゃんはオーサリング時にMCを左右反転させているのですが、それに残像エフェクトを適用してみると 左右反転が残像に適用されない状況になってしまう模様です。これを回避するためには左右反転を行ったMCの更に一つ上の階層にMCを覆わせる必要があります。結果下段カバのようになります。
また、BitmapData.drawメソッドはMC内の正の方向に位置している画像データしかキャプチャーしてくれない模様で、この仕様の為に現在作成しているゲームでは使用を断念することになりました。
キャラクターの足元の座標をそろえるために、キャラクターの画像データは全て負の方向に配置しているのですよね。
【 ソース 】
→AfterEffect.as
【 使用例 】
//エフェクト用プロパティ定義 var mc :MoveClip = _root.mc; var inter:Number = 100; var eraze:Number = 10; var clr :ColorTransform = new ColorTransform( 1, 1, 1, 1, -90, -90, 255, 0 ); //エフェクト処理開始 var ae:AfterEffect = new AfterEffect( mc, inter, eraze, clr ); ae.main(); //キャラクター移動処理 var speed:Number = 3; mc.onEnterFrame = function(){ if( ( this._x += speed ) > Stage.width ) this._x = 0; };
mcが残像を表示したいMC。
interは残像表示間隔で単位はミリ秒です。単位が大きいほど残像表示間隔が広がります。
erazeは残像消去用アルファ値で1~100の値が指定します。数値が小さいほどゆっくりと残像が消えます。
clrは残像の色を指定します。Flashヘルプとこちらのエントリーを参照ください。
エフェクト解除を行いたい場合は AfterEffect.destroyメソッドを呼び出します。
注意点として、AfterEffectクラス内部ではパラメータに指定したMCの深度操作を行っているため、他のスレッドで残像表示を行っているMCの深度を変更したい場合、必ずdestroyメソッドを呼び出して一旦残像を解除する必要があります。
深度操作を行っている理由は、残像がつねに残像対象MCの後ろに表示されるようにしているためです。
[ FLASH ] [ GRAPHIC ] [ tips ] 投稿者 siratama : 2006年01月13日 02:37