January 5, 2010

[AS3]他のオブジェクトに自由に値を送れるカスタムEvent

Event通知元から何かしらのメッセージを自由にリスナーオブジェクトに送信するためのメモ。

Dynamic化したカスタムEvent、DynamicEventを作り、dispatchEventでEventを送信する前にDynamicEventのインスタンスに適当にプロパティをぶっ込んでそのままdispatchEventで送ってやればOK。

これでEvent受信元は、引数で渡されるDynamicEventのさっき作ったプロパティから値が取り出せる。

DynamicEventクラスはこんな感じ。Eventクラス継承してDynamic付加してるだけ。

package
{
	import flash.events.Event;
	
	public dynamic class DynamicEvent extends Event
	{
		public static const SOMETHING:String = "something";
		
		public function DynamicEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false):void
		{
			super( type, bubbles, cancelable );
		}
	}
}

送信元の処理はこんな感じ。

var event:DynamicEvent = new DynamicEvent( DynamicEvent.SOMETHING );
//適当なプロパティをこしらえる
event.message = "クソ眠い";
//Event発行
dispatchEvent( event );

Eventオブジェクトを受け取るイベントハンドラはこんな感じ。

hoge.addEventListener( DynamicEvent.SOMETHING, function( e:DynamicEvent )
{
	//「クソ眠い」が出力される。
	trace( e.message );
});

#追記
@lalalilaさんに教えてもらったDataEventを使えばString型のデータなら同様の事が可能っぽい。lalalilaさんありがとうございます。

#さらに追記
Eventクラスのサブクラスについてもひとつ注意点が。
[AS3]Eventクラスのサブクラスを作る時の注意点 | source-lab. note

posted at 06:24 PM

 

コメント





About the author

西村斉輝(にしむらなおき)

1984年兵庫県生まれ。
現在多摩美術大学GD科在籍。
パーソナルサイト
source laboratory™運営。

Syndication

Powerd by
MovableType 4.1