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 対応で作れって言う人。
ピンバック: EaselJSのEventDispatcher.jsを借りてJavaScriptでaddEventListener « イナヅマTVログ