マウスイベントを拾ってみよう


MCを張れるようになったら、マウスイベントを取れるようにしてみる

AS2使いがよく質問する
on(press) や、 mc.onPress = function ができなくなったって、あたりね。

AS3でのイベントの取得


AS3では基本的にイベントの取得は、addEventListener というものを使って、「誰が」発信した「どのイベント」を、「どの関数が」うけとるかを、定義して使う。

発信者.addEventListener( イベントタイプ, 受け取る関数 )

雰囲気的には、従来のStage.addListener とか Key.addListener に近い感じ。 なのでAS3では例えばマウスイベントを受け取りたい場合、まずイベントを受け取る関数を用意して、ムービークリップにマウスイベントはその関数に渡せって登録してやる必要がある。
それがさっきの「発信者.addEventListener( イベントタイプ, 受け取る関数 )」

なんでこんな風にかわったのか?っていうと、従来の onPress 的やり方は楽な分1つ弱点があったから。
それは1つのon〜には、1つのfunction しか割り当てられなかったこと。
このせいで機能拡張とかすると、昔のコードを消したり、作り直す必用がでたりした。
addEventListener方式のいいところは、1つのイベントに何個も関数を定義できること。

myMC.addEventListener( MouseEvent.MOUSE_DOWN, onPress1 );
myMC.addEventListener( MouseEvent.MOUSE_DOWN, onPress2 );
myMC.addEventListener( MouseEvent.MOUSE_DOWN, onPress3 );

とかやれば、myMCがクリックされたらonPress1, onPress2, onPress3 の3つが呼び出される。
この方法だと、あとでマウス押したら音もつけなきゃ、とかエフェクトもつけなきゃってときに前のコードに手をいれなくてもよかったりする。
単体で使う分にはちょっと面倒だけど、拡張するときは楽なんだね。

実際にイベントを使ってマウスをとってみよう。


例によって1フレ目にずらずらと書く。

import flash.events.MouseEvent;
import flash.display.MovieClip;

var mc : MovieClip = new ライブラリでリンケージ設定したMC();
addChild( mc ); //MCを貼る

mc.addEventListener( MouseEvent.MOUSE_DOWN, onPress );

function onPress( event : MouseEvent ){
var target : MovieClip = MovieClip( event.currentTarget );
trace( target, "がクリックされました。" );
}

こんな感じ。
マウスイベントの種類は、MouseEventクラスをオンラインドキュメントかなんかでチェックすれば、ロールオーバーとかアウトとか色々あるのがわかる。
最終更新:2007年05月23日 13:48