@robpenner : Robert Penner 先生の ActionScript 3 Event 処理ライブラリ Signals を使うためのはじめの一歩。
github : as3-signals
Robert Penner 先生はFlash easing関数の生みの親とも言うべき偉大なお方です。
Flash MX のころ、ActionScript とバージョンを付けずに呼ばれていた時、に Object Oriented Programming を謳う書籍を出版し、その本でイージング関数、3D、カラーマトリックスなどの様々なサンプルコードで衝撃を与えました。
その後 Macromedia の中の人になり、mx 系のモーション関数や今でも使われている Sine.easeIn…などのイージング関数がFlashに加えられるのに大きな働きをされたようです。
現在はディズニー系のWebゲーム制作会社で活躍されています。
そんな Robert Penner 先生のライブラリなので前から興味があったんだけど、Event 処理って地味だしガリガリ書けばどうにかできちゃうんでずーーっとほったからしでした。
ボタンをクリックを Signals で実装してみました。
import org.osflash.signals.natives.NativeSignal; import flash.events.MouseEvent; import flash.display.Sprite; var button:Sprite = new Sprite(); button.graphics.clear(); button.graphics.beginFill(0x6699CC); button.graphics.drawRoundRect(0, 0, 120, 40, 8); button.graphics.endFill(); button.mouseEnabled = true; button.buttonMode = true; button.x = (stage.stageWidth - button.width) * .5; button.y = (stage.stageHeight - button.height) * .5; addChild(button); var clicked:NativeSignal = new NativeSignal(button, MouseEvent.CLICK, MouseEvent); clicked.addWithPriority(onClicked0, 0); clicked.add(onClicked); clicked.addOnce(onClickedOnce); clicked.addWithPriority(onClicked9, 9); function onClicked0(e:MouseEvent):void { trace("clicked 0"); } function onClicked9(e:MouseEvent):void { trace("clicked 9"); } function onClicked(e:MouseEvent):void { trace("clicked"); } function onClickedOnce (e:MouseEvent):void { trace("clicked once"); } |
trace
// trace 1回目 clicked 9 clicked 0 clicked clicked once // trace 2回目 clicked 9 clicked 0 clicked |
ワンタイム・イベントを設定する時は威力を発揮しそう。
面倒な addEventListener, removeEventListener
を書かなくとも addOnce
だけで済んじゃうのは嬉しい限りです。
Event レシーブの順序(priority)設定ができるのも便利かもです。
まだまだはじめの一歩。
もっと研究しないと実践投入はできそうにない。