始めまして、冨田です。
これからこのブログで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
冨田