イナヅマTVログ

ActionScript 3, Event処理を簡単に – Signalsはじめの一歩

| 0件のコメント

@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)設定ができるのも便利かもです。
まだまだはじめの一歩。
もっと研究しないと実践投入はできそうにない。

コメントを残す

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


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください