- 2007年12月12日 21:43
- ActionScript 3.0
▼ おさらい
■MOUSE_XXXX系
MOUSE_OVER, MOUSE_OUTはイベントを設定した DisplayObject 内にaddされた
どの DisplayObject であっても, マウスがOVER, OUTすればイベントが発生します。
つまり○の中に○を置いて◎みたいな MovieClip を作った場合
外側の○にカーソルを合わせた場合、外側の○で MOUSE_OVER イベントが発生。
その後、内側の○にカーソルを合わせると、外側の○で MOUSE_OUT イベントが
内側の○で MOUSE_OVER イベントが発生します。
要するに、なんでもいいからカーソルが触れている DisplayObject が変わったら
イベントが発生する仕組みです。
■ROLL_XXXX系
ROLL_OVER, ROLL_OUT は、設定した DisplayObject 全体の判定エリアから
マウスがOVER, OUTした時のみ発生します。
つまり○の中に○を置いて◎みたいな MovieClip を作ったとしても
その後、◎にカーソルを合わせると、 ROLL_OUT イベントが
◎にカーソルからカーソルを外すと、 ROLL_OVER イベントが発生します。
要するに、設定したDisplayObject全体から
MOUSE_OVER, MOUSE_OUT しないと発生しません。
ここが大きな違いです。
さて、ここからが今回のお話です。
前述したものを検証するためにswfを作りました。それが以下のswfです。
10分くらいで作ったのでわかりやすさの考慮はZEROです。
ごめんなさい。
■over_out_sample.swf
large, middle, small という名前の大中小三つの丸いMovieClipをつくります。
その後、その三つを含んだMovieClipを作り circle と名づけました。
その circle に対してaddEventListenerし、制御を行っています。
xxxxx_out_back とかは、周りの ROLL_OVER とか書かれたやつです。
コード的には以下な感じ
// circleにイベントリスナを追加する。
circle.addEventListener( MouseEvent.ROLL_OUT, _onRollOut );
circle.addEventListener( MouseEvent.ROLL_OVER, _onRollOver );
circle.addEventListener( MouseEvent.MOUSE_OUT, _onMouseOut );
circle.addEventListener( MouseEvent.MOUSE_OVER, _onMouseOver );
// ROLL_OUT のイベントハンドラ
function _onRollOut( evt:MouseEvent ):void{
// ROLL_OUTの表示をアニメーションさせる.
roll_out_back.gotoAndPlay(2);
}
// ROLL_OVER のイベントハンドラ
function _onRollOver( evt:MouseEvent ):void{
// ROLL_OVERの表示をアニメーションさせる.
roll_over_back.gotoAndPlay(2);
}
// MOUSE_OUT のイベントハンドラ
function _onMouseOut( evt:MouseEvent ):void{
// イベントが発生したMovieClip名で判別し
// 対応するMOUSE_OUTの表示をアニメーションさせる.
switch( evt.target.name ){
case "large":
large_out_back.gotoAndPlay(2);
break;
case "middle" :
middle_out_back.gotoAndPlay(2);
break;
case "small" :
small_out_back.gotoAndPlay(2);
break;
}
}
// MOUSE_OVER のイベントハンドラ
function _onMouseOver( evt:MouseEvent ):void{
// イベントが発生したMovieClip名で判別し
// 対応するMOUSE_OVERの表示をアニメーションさせる.
switch( evt.target.name ){
case "large":
large_over_back.gotoAndPlay(2);
break;
case "middle" :
middle_over_back.gotoAndPlay(2);
break;
case "small" :
small_over_back.gotoAndPlay(2);
break;
}
}
ソースも晒しておきます。
over_out_sample.fla
また、なにかここがおかしい、それは違う
などありましたら教えて頂けるとうれしいです。
これってどうなってるの?っていう質問もあればコメントにお願いします。
- Newer: AS3.0 Array拡張時の注意点
- Older: AS3.0 MOUSE_OVERとROLL_OVERの違い