« Progression に触れてみる | メイン | AS2でAS3のEventDispatcher »
2008年3月28日
[as3] イベントを間接的に通知する EventMediator クラス
メンバーに対してイベント通知を促すクラスです。
ソースファイル
例えば Shapeオブジェクトにマウスイベントくっつけたり、
Timerオブジェクトに enterFrame イベントくっつけたりするのに使います。
まず通知元オブジェクトを登録した EventMediator オブジェクトを作成します。
作成した EventMediator オブジェクトに通知メンバーを登録します。
通知元オブジェクトがイベントを通知(dispatchEvent の実行)すると、
メンバーの各オブジェクトも同じイベントを通知するようになります。
TimerクラスやURLLoaderクラスは、もともとenterFrameイベントを持っていませんが
登録しておくと、これらのオブジェクトがenterFrameイベントを通知するようになります。
一応 fla ファイルも置いときます。
demo.fla
demo2.fla
ソースファイル
例えば 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

コメントする