基礎 イベントオブジェクト1

2010.11.30kickbaseActionScript3.0 | FlashDevelop


今回はイベントオブジェクトの解説です。イベントドリヴンの要素としてとても重要なイベントオブジェクトですが、そのものの説明をあまり見かけないのでここでお話しておきます。イベントオブジェクトの理解を深めることで、イベントハンドラの処理内容に幅をもたせることができます。

▼イベントオブジェクト

イベントが起こったときの状況を保持しているオブジェクトです。誰がそのイベントを起こしたのか?いつ、どこで起こったのか?等々、イベントオブジェクトの中身を覗くことで様々な情報を取得することができます。また、イベントオブジェクトはその種類によって保持している情報が異なります。MouseEventオブジェクトなら、マウスイベントに関する情報(ロールオーバーされたのか、クリックされたのか… 等々)を。KeyboardEventオブジェクトなら、キーボードイベントに関する情報(シフトキーが押されているか、キーコードは何か…等々)を。状況やインタラクションの種類によって使い分ける必要があります。実際のコードで見てみましょう。

イベントハンドラ

private function hoge(e:Event):void 
{

}

通常のメソッドと区別するため、イベントが起きたときに実行されるメソッドを「イベントハンドラ(関数)」や「リスナー関数」と呼びます。(本ブログではイベントハンドラで統一しています。)このイベントハンドラの引数eがイベントオブジェクト(上記例ではEventオブジェクト)になります。「イベントが起きたときに実行される」ことがイベントハンドラの定義なので、必ず引数にイベントオブジェクトを指定しましょう。

ここでちょっとしたポイントなのですが、僕がAS3を勉強しはじめたとき、書籍によってイベントオブジェクトがeやevt、event、eventObjectなどまちまちで、どれが正しいんだ!と困惑したことがありました。これはすごく単純なのですがどんな名前にしてもいいというのが回答になります。引数の名前は自分で勝手に決めてよいので、どんな名前でもちゃんと動作します。moguや、aaaaa、abcとかでも大丈夫です。
ただし「変数やメソッド、引数の名前は分かりやすくつける」というのがプログラムの基本なので、一般的なeやeventObjectなどがお勧めです。ちなみにFDを使用している方はコードジェネレート機能(Ctrl+Shift+1)のお世話になってる方も多いと思います。この機能を使えば、自動的にイベントオブジェクトをeとしてイベントハンドラを生成してくれるので、特に名前を気にする事なくコーディングできますね。

▼イベントオブジェクトが保持している情報をtraceしてみる

イベントオブジェクト自身(本例ではMouseEventオブジェクト)をトレースし、出力結果を見てみましょう。

Main

package 
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	/**
	 * ...
	 * @author kickbase
	 */
	[SWF(width = "640", height = "480", frameRate = "30", backgroundColor = "#ffffff")]
	 
	public class Main extends Sprite 
	{
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			//ステージ設定
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			//ステージがクリックされたらonClickイベントハンドラを実行します
			stage.addEventListener(MouseEvent.CLICK, onClick);
		}
		
		/*
		 * FDのコードジェネレート機能を使うとイベントオブジェクトをeとして生成してくれます
		 * 
		 * イベントオブジェクトというのは引数なので、好きな名前をつけてかまいません
		 * evtでも、eventでも、eventObjectでもいいので、分かりやすい名前にしましょう
		*/
		private function onClick(e:MouseEvent):void 
		{
			trace( "e : " + e );
		}
	}
}

出力結果(様々な情報が詰まっていることが分かると思います)

e : [MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=506 localY=193 stageX=506 stageY=193 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0]

サンプルのダウンロード


ページトップへ