JAVAC.JP
HOSHI TETSUYA 星鉄矢
2005/07/25
hossy@javac.jp
http://www.javac.jp
Google
WWW を検索 WWW.JAVAC.JP を検索

3-4 EventDispatcher - サンプル

実際のEventDispatcherのサンプルを見てみる。
ここでは、ムービークリップをムービークリップボタンにする簡単なサンプルを取り上げる。
コードを書かない状態のSWFファイルは次のexample1のようである。
example1
EventDispatcherを用いて、onReleaseのイベントリスナーをつけると、次のexample2のようになる。
example2
ソースコードは以下のようになる。
全体をリンケージ名testのムービークリップで包んで、そこにTestClassをレジスタークラスしている。
import mx.events.EventDispatcher;

class TestClass extends MovieClip{
    var button_a:MovieClip;
    var button_b:MovieClip;
    var button_c:MovieClip;
    var namefield:TextField;

    function TestClass(){
        EventDispatcher.initialize(button_a);
        button_a.onRelease=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="onReleaseA";
            this.dispatchEvent(lo);
        }
        button_a.addEventListener("onReleaseA",this);

        EventDispatcher.initialize(button_b);
        button_b.onRelease=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="onReleaseB";
            this.dispatchEvent(lo);
        }
        button_b.addEventListener("onReleaseB",this);

        EventDispatcher.initialize(button_c);
        button_c.onRelease=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="onReleaseC";
            this.dispatchEvent(lo);
        }
        button_c.addEventListener("onReleaseC",this);
    }

    function onReleaseA():Void{
        namefield.text="APPLE";
    }

    function onReleaseB():Void{
        namefield.text="BANANA";
    }

    function onReleaseC():Void{
        namefield.text="CHEESE";
    }
}
EventDispatcherの便利な点として、addEventListenerの(メソッド名,参照)という指定法がある。
参照にthisを用いることが多いが、実際は_global.hogeクラスのfugeメソッドでも構わない。匿名メソッドとして登録する際は、何かしらの工夫をしないとその匿名メソッドの外へ参照を指定できないという点をaddEventListnerでは解消している。

参考までに、ActionScript 1.0では以下のように参照を持たせて実行することが多かった。
test_button.owner=this;
onReleaseTest=function(){
    trace("Clicked.");
}

test_button.onRelease=function(){
    this.owner.onReleaseTest();
}
他言語を扱ってきたユーザには、EventDispatcherの方がなじみやすいかと思う。



BACKTOPNEXT




All Contents Copyright (C) 2005 HOSHI Tetsuya
Home