« Progression に触れてみる | メイン | AS2でAS3のEventDispatcher »

2008年3月28日

[as3] イベントを間接的に通知する EventMediator クラス

メンバーに対してイベント通知を促すクラスです。
ソースファイル

例えば Shapeオブジェクトにマウスイベントくっつけたり、
Timerオブジェクトに enterFrame イベントくっつけたりするのに使います。

まず通知元オブジェクトを登録した EventMediator オブジェクトを作成します。
作成した EventMediator オブジェクトに通知メンバーを登録します。
通知元オブジェクトがイベントを通知(dispatchEvent の実行)すると、
メンバーの各オブジェクトも同じイベントを通知するようになります。

import flash.events.Event;
import flash.net.URLLoader;
import flash.utils.Timer;
import flash.display.Sprite;

import com.seyself.events.EventMediator;

var madiator:EventMediator = new EventMediator( new Sprite() );
var urlLoader:URLLoader = new URLLoader();
var timer:Timer = new Timer(1);

madiator.addEventListener( "enterFrame" , null );
madiator.member = [urlLoader,timer];

urlLoader.addEventListener( "enterFrame" , enterFrameHandler );
timer.addEventListener( "enterFrame" , enterFrameHandler );
function enterFrameHandler( event:Event ):void
{
    trace(event.target);
    event.target.removeEventListener( "enterFrame" , arguments.callee );
    //madiator.removeEventListener( "enterFrame", enterFrameHandler );
}
上記のコードの場合、出力結果は以下のようになります。
[object URLLoader]
[object Timer]

TimerクラスやURLLoaderクラスは、もともとenterFrameイベントを持っていませんが
登録しておくと、これらのオブジェクトがenterFrameイベントを通知するようになります。

一応 fla ファイルも置いときます。
demo.fla
demo2.fla

トラックバック(0)

このブログ記事を参照しているブログ一覧: イベントを間接的に通知する EventMediator クラス

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/488

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。