« 一定時間を待つ | メイン | イベントリスナーからの消去 »

イベントリスナーへの登録

マウスクリックがあったらどうする、キー入力があったらどうするというようにイベントに応じてスクリプトを実行するには、イベントを受け止めるイベントハンドラを設定します。しかし、イベントハンドラを作ってもそれを設定したインスタンスにイベントメッセージが送られなければ意味がありません。
たとえば、ビルトインクラスのMovieClipクラスはマウスクリックイベントのonMouseUpやonMouseDown、あるいはonPressといったイベントが送られるので、これを受けるイベントハンドラを設定すればマウスクリックに応じたスクリプトを実行できます。ムービークリップインスタンスのmy_mcならば、次のイベントハンドラを設定すればマウスクリックで回転します。ステージのどこをクリックしてもonMouseDownイベントがすべてのムービークリップインスタンスに送られるので、インスタンスをクリックしなくてかまいません。

sample→evetlistener1.fla

//マウスイベントを受けてインスタンスを回転させる
my_mc.onMouseDown = function(){
this._rotation += 10;
}

ところが、次のようにObjectクラスでmyObjインスタンスを作ってonMouseDownイベントハンドラを設定しても、myObjインスタンスへはマウスイベントが送信されないので応答しません。

sample→evetlistener2.fla

//ObjectクラスのmyObjインスタンスを作る
myObj = new Object();
//イベントハンドラを設定する
myObj.onMouseDown = function(){
trace("クリックがありました");
}

myObjインスタンスにマウスクリックのイベントが送信されるようにするには、addListener()メソッドを使ってMouseクラスのリスナーに登録します。リスナーへの登録は、「サブスクライブ(subscribe)」とも呼ばれます。

//myObjをMouseクラスのイベントリスナーに登録する
Mouse.addListener(myObj);

同様に、キー入力イベントに応答するようにするには、Keyクラスのイベントリスナーに登録します。

sample→evetlistener3.fla

//ObjectクラスのmyObjインスタンスを作る
myObj = new Object();
//イベントハンドラを設定する
myObj.onKeyDown = function(){
trace("キー入力がありました");
}
//myObjをMouseクラスのイベントリスナーに登録する
Key.addListener (myObj);

note:
キー入力イベントをムービープレビューでテストする際には、制御メニューの[キーボードショートカットを無効]をチェックしておく必要があります。


MovieClipクラスにもキー入力イベントは送信されません。そこで、ムービークリップのインスタンスをキー入力で操作するにはインスタンスをKeyクラスのイベントリスナーに登録します。次の例では、矢印キーを押すとキーに応じた方向にインスタンスの座標が移動します。

sample→evetlistener4.fla

フレームアクション:
//ball_mcインスタンスにキー入力のイベントハンドラを設定
ball_mc.onKeyDown = function(){
switch (Key.getCode()){
case Key.LEFT: //←キー
this._x -= 10;
break;
case Key.RIGHT: //→キー
this._x += 10;
break;
case Key.UP: //↑キー
this._y -= 10;
break;
case Key.DOWN: //↓キー
this._y += 10;
break;
}
}
//Keyクラスのイベントリスナーに登録する
Key.addListener(ball_mc);

投稿者 oshige : 2005年2月20日 19:26