イナヅマTVログ

ActionScript 2, mx ライブラリ使用メモ mx.events.EventDispatcher

| 1件のコメント

ActionScript 3 + Flash Player 10 の話題が旬なことは承知していますが、ActionScript 2 なネタ。

■ mx パッケージ 使いまくり

Flash CS3 以前から添付されてたけどなぜか undocument な Adobe 作成の mx パッケージ。
今では mx パッケージは Flex Builder 用のパッケージだけど、Flash では ActionScript 2 用のパッケージとして添付されています。
このライブラリが結構使えるんだ。

mx.events.EventDispatcher

ActionScript 2 でも addEventListener ができるスグレもの。
removeEventListener, dispatchEvent と ActionScript 3 と同名の関数が用意されてる。

使用方法はビルトインされている ActionScript 3 とはチョイ違う。

import mx.events.EventDispatcher;
 
var dispatcher:Object = {};
EventDispatcher.initialize (dispatcher);

EventDispatcher.initialize の引数に設定した空の Object に EventDispatcher から関数が移植(?)される。

変数 _level0.dispatcher = [オブジェクト #4, クラス 'Object'] {
    addEventListener:[関数 'addEventListener'],
    removeEventListener:[関数 'removeEventListener'],
    dispatchEvent:[関数 'dispatchEvent'],
    dispatchQueue:[関数 'dispatchQueue']
  }

dispatchQueue は EventDispatcher クラス内部で使われる関数のようです。

●使い方

// リスナー(Object)作成
// イベントハンドラ(Function)作成
var listener1:Object = {};
listener.onPress = function (args:Object) {
	trace("listene press type="+args.type+" value="+args.value);
}
 
// イベントにリスナー設定
dispatcher.addEventListener("onPress", listener);
 
// イベント発生時にdispatchEvent実行
button_mc.onPress = function () {
	dispatcher.dispatchEvent({type:"onPress", value:"some value"});
}

dispatchEvent の引数にObjectを設定。
引数のObjectにtypeキーがあることが必須。
typeの値はイベント名(String)。
ActionScript 3 とは違い続けて任意の Key:Value をいくつでも設定可能。

*ActionScript 3 でもイベントハンドラに任意の値の設定はできます。めんどくさいけど・・・

ActionScript 2 でこんな回りくどいことをしてまで addEventListener を実装するかは意見もあるだろうとは思いますが、コードメンテナンスの上でお薦めです。

まぁ、Flash Player 10 対応のコンテンツを作る現在ではムダな知識のひとつですけどね。 😉

でもたまにいるんだよね、今でも Flash Plaer 8 対応で作れって言う人。

1件のコメント

  1. ピンバック: EaselJSのEventDispatcher.jsを借りてJavaScriptでaddEventListener « イナヅマTVログ

コメントを残す

必須欄は * がついています