Home > ActionScript 3.0 > 続 AS3.0 MOUSE_OVERとROLL_OVERの違い

続 AS3.0 MOUSE_OVERとROLL_OVERの違い

前回の記事
MouseEventのサンプルをあげますと言っていたのでアップします。

とりあえず前回からのおさらいからはじめます。



▼ おさらい

■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

また、なにかここがおかしい、それは違う
などありましたら教えて頂けるとうれしいです。
これってどうなってるの?っていう質問もあればコメントにお願いします。

Comments:3

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Anonymous 2009年2月23日 21:10

すげー。とても分かりやすかったです。ありがとうございました!

Anonymous 2009年4月15日 03:06

なんと!初めて知りました。ありがとうございます。

mmlemon 2009年4月23日 18:12

ちょうどMOUSE_OVERとROLL_OVERの違いが気になっていたときにわかりやすいサンプル付きで説明されていてすごく助かりました!

ありがとうございました。

Trackbacks:1

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/18
Listed below are links to weblogs that reference
続 AS3.0 MOUSE_OVERとROLL_OVERの違い from flair4 blog
【ActionScript3.0】MOUSE_OVERとROLL_OVERの違い from Flash脳トレーニング 2009-09-10 (木) 23:55
「Flashエンジニア」の肩書きを目指すべく、敬遠していていたAS3.0に取り掛かろうと思う。 【MOUSE_OVER】 と 【ROLL...

Home > ActionScript 3.0 > 続 AS3.0 MOUSE_OVERとROLL_OVERの違い

Search
Feeds

Return to page top