« 4.1 クラスを使う (2)パッケージとインポート | メイン | 表紙、価格、発売日 »

5.1イベントリスナー登録とイベントハンドラ(1)

■イベント発生とイベントリスナーの仕組み
ActionScript3.0からイベント処理の仕組みが変わりました。「クリックで移動」などのようにイベントを受けて処理を実行したい場合には、受けたいイベントの種類と実行したいメソッドの組み合わせを、addEventListener()メソッドを使ってイベントを受けることができるクラスにリスナー登録して待っています。イベントが発生すると登録しておいたメソッドが呼ばれます。この一連の流れを図にすると次のようになります。
この仕組みは、「誰か訪ねてきたら、ここに連絡してください」と受付に登録しておくようなものです。すると受付は「誰が何時訪ねてきたか」というイベントオブジェクトを連絡してくれるというわけです。

fig05-01-01p206 イベント発生を受ける仕組み。

簡単な例をメインのタイムラインのフレームアクションで確認してみましょう。次の例はステージのインスタンスball_mcをクリックしたならばonClick()メソッドを実行するスクリプトです。イベントの種類はMouseEvent.CLICK、イベント発生で呼び出すイベントハンドラ名はonClickです。

[:sample:] clickeventSample1.fla
例:
//CLICKイベントのリスナーに登録
ball_mc.addEventListener(MouseEvent.CLICK, onClick);

//イベントを受けて実行
function onClick(event:MouseEvent):void {
	trace("Clickしました");
}

fig04-01-01 インスタンスをクリックすると出力ウインドウに「Clickしました」と出力されます。
これをクラス定義すると次のClickEventSample2クラスのようになります。
ClickEventSample2クラスではクリックするムービークリップインスタンスをコンストラクタの引数で受け取りmy_mcに入れています。クリックイベントを処理するイベントリスナーに登録すればインスタンスはボタンになりますが、マウスカーソルは通常のままです。そこで、buttonModeプロパティをtrueにし、インスタンスにロールオーバーしたならば指カーソルになるようにします。
なお、フレームアクションでは必要ありませんが、クラス定義する場合にはMouseEventクラスとMovieClipクラスのインポートを忘れないようにします。

[:sample:] ClickEventSample2.as
例:インスタンスにクリックイベントを設定するClickEventSample2クラス
package {
	import flash.events.MouseEvent;
	import flash.display.MovieClip;

	public class ClickEventSample2 {
		var my_mc:MovieClip;
		//コンストラクタ
		function ClickEventSample2(mc:MovieClip) {
			my_mc = mc;
			//指カーソルにする
			my_mc.buttonMode = true;
			//CLICKイベントのリスナーに登録
			my_mc.addEventListener(MouseEvent.CLICK, onClick);
		}
		//イベントを受けて実行
		function onClick(event:MouseEvent):void {
			trace("Clickしました");
		}
	}
}


ステージにball_mcを作り、メインのタイムラインのフレームアクションには次のスクリプトを書いてテストします。

[:sample:] clickeventSample2.fla
例:メインのタイムラインのフレームアクション
var ballObj:ClickEventSample2 = new ClickEventSample2(ball_mc);

fig04-01-01 インスタンスをクリックすると出力ウインドウに「Clickしました」と出力されます。ロールオーバーすると指カーソルになります。

ところで、イベントリスナーが呼び出すonClick(event:MouseEvent)メソッドには引数が指定してあります。ClickEventSample2クラスでは送られてくる引数eventを使っていませんが、必ず引数を指定しなければなりません。引数として送られてくるeventはMouseEventイベントオブジェクトであり、クリックした座標や同時に押されていたモディファイキーの状態などのプロパティをもっています。
ClickEventSample2クラスのonClick()メソッドに次のように1行追加すると、eventオブジェクトのプロパティの値を調べることができます。

例:イベントオブジェクトのプロパティを調べる
function onClick(event:MouseEvent):void {
	trace("Clickしました");
	trace(event.target, event.shiftKey, event.stageX, event.stageY);
}


About

2007年7月19日 08:39に投稿されたエントリーのページです。

ひとつ前の投稿は「4.1 クラスを使う (2)パッケージとインポート」です。

次の投稿は「表紙、価格、発売日」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。