2009-07-28 8 views
0

独立したクラス間で通信する最も単純な方法は何でしょうか? 私は2日間探していましたが、何も見つかりませんでした。 はクラスにdispatchEventがあり、もう1つにカスタムイベントがあるaddEventListenerがあります。私は親クラスの関係を持つ同じクラスo内のソリューションしか見つけることができませんでしたが、私が探しているのは話す "兄弟"のようなものです ありがとうFlash AS3独立したクラスを伝達する最も良い方法は?

答えて

0

ChildClass1、ChildClass2、およびParentClassがある場合、 ChildClass1とChildClass2は両方ともParenClassの子です。

ChildClass1はイベントを送出します。 ParentClassはこのイベントをリッスンし、ハンドラはChildClass2を更新します。

0

ParentClassがない場合は、Childsを登録し、それに応じて通知するChildManagerClassを使用することもできます。

+1

もう少し具体例で説明できますか?ありがとうございました –

+1

可能であれば説明してください、私も興味があります。ありがとう、Katax –

2

通常、イベントをディスパッチするクラスをEventDispatcherに拡張するか、IEventDispatcherに実装する必要があります。派遣のクラスで(すべてのDisplayObject S行うので、あなたのクラスはDisplayObjectのであれば、あなたは余分な何もする必要はありません。)

:リスニングクラスで

class DispatchingClass extends Event Dispatcher { 
    function doSomething() { 
     // do stuff 
     dispatchEvent(new Event("FOO")); 
    } 
} 

class ListeningClass { 
    function startListening(dispatcher:DispatchingClass) { 
     dispatcher.addEventListener("FOO", handleFoo); 
    } 

    function handleFoo(evt:Event) { 
     // do stuff 
    } 
} 
は、

EventDispatcherはカスタムイベントで正常に動作します。何らかの理由で、あなたのリスニングクラスが持っていないし、あなたの派遣クラスのインスタンスを取得できない場合


は、あなたがグローバルイベント放送局を作ることができます。基本的には、普遍的にアクセス可能なクラスを EventDispatcher(または IEventDispatcherを実装しています)にして、イベントをリッスンし、それを通知するものにイベントをディスパッチします。ここで

は、イベントの放送局の最低限の実装です:

import flash.events.EventDispatcher; 

public class EventBroadcaster extends EventDispatcher { 
    private static var _instance:EventBroadcaster = new EventBroadcaster(); 

    public function EventBroadcaster() { 
     if (_instance != null) { 
      trace ("Error: an instance of EventBroadcaster() already exists."); 
     } 
    } 


    public static function getInstance():EventBroadcaster { 
     return EventBroadcaster._instance; 
    } 
} 

あなたはかなり同じようにそれを使用する:

class DispatchingClass { 

    function doSomething() { 
     // do something 
     EventBroadcaster.getInstance().dispatchEvent(new Event("FOO")); 
    } 
} 

class ListeningClass { 
    function startListening() { 
     EventBroadcaster.getInstance().addEventListener("FOO", handleFoo); 
    } 

    function handleFoo(evt:Event) { 
     // do stuff 
    } 
} 

dispatchEvent()addEventListener()は内蔵からだけで機能していますEventDispatcherにあります。

イベントブロードキャストの作成方法と便利な機能の追加方法については、Event Broadcaster - Simple events solution...にいくつかのディスカッションがあります。記事Centralized Event Management in Actionscript 2.0にはこのコンセプトの紹介があります。

関連する問題