[as3]大量のムービークリップを一度に処理する方法(EventDispatcher)
始めまして、冨田です。
これからこのブログでActionScript 3.0の便利な機能を紹介させていただきます。
今回紹介するのはEventDispatcherです。
ますは、このサンプルを見てください。
※画面の好きな場所をクリックしてください。
さて皆様、大量にあるムービークリップ全てに
同じ動きをさせるためにこんな書き方をしていませんか?
stage.addEventListner(MouseEvent.CLICK,mc_move);
function mc_move(ev:MouseEvent){
mc1.x = 100;
mc2.x = 200;
mc3.x = 300;
mc4.x = 300;
……
…
}
これくらいの数なら手で書いても良いのですが
これが100個200個になると手で書くのは大変ですし非効率ですよね。
そんな時に便利なのがEventDispatcherとカスタムクラスの組み合わせです。
EventDispatcherとは
大量のイベント送出先に一発でイベントを送出したり
ムービーが全て終わったことを伝えたりといろいろできます。
では、ステージをクリックすると一斉に起立、着席をする
簡単なスクリプトを書いて見ましょう。
次にステージ上にダイナミックテキストを作ります。
インスタンス名はtextにしてください。

//ステージをクリックすると_onClickを実行
stage.addEventListener(MouseEvent.CLICK, _onClick);
//変数standupに"着席!"を代入
var standup:String = "着席!"
function _onClick(ev:MouseEvent):void{
//"event"が登録されているイベントを実行
dispatchEvent(new Event("event"));
/*下記は条件演算子です。standupが"着席!"ならstandupを"起立!"に
standupが"着席!"でないならstandupを"着席!"にしろという意味です*/
standup == "着席!" ? standup = "起立!" : standup = "着席!";
text.text = standup;
}
//インスタンスの生成、配置とイベントの登録
function init(){
for(var i:int=0; i<10; i++){
var mc:Clip = new Clip();
mc.x = i * 50 + 50;
mc.y = 150;
addChild(mc);
//dispatchEventで登録した"event"を実行します
addEventListener("event", mc._Event);
}
}
//関数init()を実行
init();
次にasファイルを作り下記コードを書いてください。
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Clip extends MovieClip{
//Clipクラスのコンストラクタです
function Clip ():void {}
public function _Event(ev:Event):void{
//変数frameに現在のフレームを代入
var frame:int = currentFrame;
//frameが1ならframeを2にframeが1でないならframeを1にします。
frame == 1 ? frame = 2 : frame = 1;
//変数frameに入っている数字のフレームへ飛びます
gotoAndStop(frame);
}
}
}
クラスファイルが完成しましたら
一番上で作ったムービークリップのリンケージに
クラスファイルの名前を入力してください。
ファイルの構成はこんな感じです。
これで準備完了です。
どうでしょうか?ステージをクリックしたら
机に座った人が起立しましたか?
これを使えばインスタンスを大量に使用する
シューティングゲームの玉を一斉に止めるポーズ機能のなどで使えるのではないでしょうか?
使える機会がありましたら、ぜひ使用してみてください。
今回のサンプルです。EventDispatcher
冨田




