AS3でイベントのブロードキャスト。

AS3でイベントをブロードキャストしたくて、 色々試してたら、意外に素直に出来る事が分かったよ。 間にイベントハンドラで1クッション入れるだけで出来た。

例えば、こんな感じの SomeView なムービークリップがいたとして、

public class SomeView extends Sprite
{
    public function SomeView():void
    {
    }
}

それの子要素にn個の SomeButton がいたとする。

public class SomeButton extends Sprite
{
    public function SomeButton():void
    {

    }
}

で、どれか1個の SomeView がクリックされたら、 全部にイベントを送信したい場合とか、

public function SomeView():void
{
    var b:SomeButton;
    for (var i:int = 0; i < 20; i++)
    {
        b = addChild(new SomeButton()) as SomeButton;
        //  SomeButtonを初期化。
        b.initialize();
        //  自分がクリックされたら、親のリスナーをコール。
        b.addEventListener(MouseEvent.CLICK, clickListener);
    }
}

private function clickListener(evt:MouseEvent):void
{
    //  ココでイベントをブロードキャスト。
    dispatchEvent(new Event('someType'));
}

親をこんな感じにしておいて、 子供側では、

public function SomeButton():void
{
    //  ココではparentが取れない(時がある)。
}

public function initialize():void
{
    //  親からブロードキャストされたイベントを補足。
    parent.addEventListener('someType', someTypeListener);
}

public function someTypeListener(evt:Event):void
{
    //  ココに処理を書く。
}

こうしておくと結構シンプルに書けるんじゃないかと。 色々殴り書き感が否めないのはご愛嬌 :-)

berian 氏、こんな感じでどうでしょ?

Posted at: 
2008/01/20 14:12:48
2 Comments
1 TrackBack
Tags: 
ActionScript
Flash
Trackback: 
http://humming.via-kitchen.com/2008/01/20/broadcast-event-on-actionscript3/trackback/

TrackBacks

[CSS][その他]巡回 - 常山日記

[subversion]TortoiseSVNのマニュアル読んでメモ flickrの写真セットをiPhoneに移すことができる『flickr2iPhone』 iUiを使って簡単iPhoneライクなページ作成をしてみた フリーの高品質なアイコンがダウンロードできるサイト -iconspedia フィードに含まれるニコニコ動画へ

Created at: 
2008/01/20 15:37:01

Comments

berian

キレイにまとまってる!!
これが一番違和感がない。
やっぱdispatchEventは使えますね。
かなり重宝してます。

この方向でやっていきます!
ありがとうございます!!

Created at: 
2008/01/20 14:34:40

nobu

僕もちょっとこの方向でやってみようと思います。
もっと良い案が見つかったら教えてくださいまし。

Created at: 
2008/01/20 17:21:06

Add Comment

Add Comment