サイトトップ

Director Flash 書籍 業務内容 プロフィール

Adobe Flash非公式テクニカルノート

InteractiveObject.rollOverイベント

ID: FN0705001 Product: Flash

Platform: All
Version: Flash 9 and above/ActionScritp 3.0

シンタックス
イベントオブジェクトの型: flash.events.MouseEvent
MouseEvent.typeプロパティ = flash.events.MouseEvent.ROLL_OVER

説明
ユーザーがポインティングデバイスを、InteractiveObjectインスタンス上に動かしたとき送出されます。イベントのターゲットは、ポインティングデバイスの下にあるオブジェクト、もしくはそのオブジェクトの親になります。relatedObjectは、直前にポインティングデバイスの下にあったオブジェクトです。rollOverイベントは、そのオブジェクトの親チェーンを下層に向けて順に送出されます。rootrelatedObjectの祖先を除く最上位の親から始まり、そのオブジェクトに達すると終わりです。

rollOverイベントを使うのは、子のあるDisplayObjectContainerのロールオーバーの動作を簡単にコーディングするためです。マウスがDisplayObjectまたはその子どもの領域内に、自分の子ども以外のオブジェクトから入ったとき、そのDisplayObjectはrollOverイベントを送出します[*1]。この点は、mouseOverイベントとの動作の違いです。mouseOverイベントは、マウスがDisplayObjectContainerの子どものオブジェクトいずれかの領域に入るたびに送出されます。たとえ、マウスがすでにそのDisplayObjectContainerの別の子どもの上にあったとしても、イベントは送られます[*2]

rollOverイベントオブジェクトのtypeプロパティの値を定義します。

このイベントには、つぎのプロパティがあります。

プロパティ
bubbles false
buttonDown マウスの主ボタンが押されていればtrue。そうでなければfalse
cancelable false。キャンセルするデフォルトの動作はありません。
ctrlKey Ctrl(Windows)またはcommand(Macintosh)キーがアクティブならtrue。アクティブでなければfalse
currentTarget イベントリスナーでイベントオブジェクトをアクティブに処理しているオブジェクト。
relatedObject ポインティングデバイスが指し示していたディスプレイリストオブジェクト。
localX イベントの発生した水平座標。配置されたSprite内の相対座標を示します。
localY イベントの発生した垂直座標。配置されたSprite内の相対座標を示します。
shiftKey Shiftキーがアクティブならtrue。アクティブでなければfalse
stageX イベントの発生した水平座標。グローバルなステージ座標で示します。
stageY イベントの発生した垂直座標。グローバルなステージ座標で示します。
target ポインティングデバイスの下にあるInteractiveObjectインスタンスです。targetは必ずしもイベントリスナーに登録したディスプレイリスト内のオブジェクトとはかぎりません。現にイベントを処理しているディスプレイリスト内のオブジェクトにアクセスするには、currentTargetプロパティを用います。

[訳者注*1] 原文は以下のように、マウスポインタがDisplayObjectから「離れて」(leave)別のオブジェクトに移動したときイベントが発生するとしています。これはrollOutイベントの解説と同じで、その文章をコピーしたまま必要な修正を加えていないものと考えられます。

When the mouse leaves the area of a display object or the area of any of its children to go to an object that is not one of its children, the display object dispatches the rollOver event.

[訳者注*2] 以下のフレームアクション(スクリプト001)は、rollOverとmouseOverの動作の違いを確認します。イベントリスナーを登録した親SpriteのインスタンスmySprite内に、子のSpriteインスタンスとして赤い四角のchild0と青い四角のchild1を配置しました。child0とchild1インスタンスの間でマウスポインタを移動しても、rollOverイベントは発生しません。

イベントリスナーに指定するイベントをmouseOverに変更する(下記スクリプト001でコメントアウトを外し、MouseEvent.ROLL_OVERへのイベントリスナー登録をコメントアウトする)と、ふたつのインスタンス間でマウスポインタを移動した場合でも、イベントは発生します(図001)。

図001■子のインスタンス間でマウスポインタを移動
ROLL_OVER
InteractiveObject.mouseOverイベントは発生し、InteractiveObject.rollOverイベントは発生しない

スクリプト001■rollOverとmouseOverイベントの動作の違いを確認

// フレームアクション
import flash.display.Sprite;
import flash.events.MouseEvent;
// 親スプライト作成
var mySprite:Sprite = new Sprite();
mySprite.name = "mySprite";
addChild(mySprite);
// 子スプライト作成
var child0Sprite:Sprite = new Sprite();
child0Sprite.graphics.beginFill(0xFF0000);
child0Sprite.graphics.drawRect(0, 0, 50, 50);
child0Sprite.name = "child0";
mySprite.addChild(child0Sprite);
var child1Sprite:Sprite = new Sprite();
child1Sprite.graphics.beginFill(0x0000FF);
child1Sprite.graphics.drawRect(25, 25, 50, 50);
child1Sprite.name = "child1";
mySprite.addChild(child1Sprite);
// イベントリスナー設定
// 以下の2行のステートメントのコメントアウトを入替えてふたつのイベントの違いを確認
// mySprite.addEventListener(MouseEvent.MOUSE_OVER, myRollOver);
mySprite.addEventListener(MouseEvent.ROLL_OVER, myRollOver);
function myRollOver(eventObject:MouseEvent):void {
  var _relatedObject = eventObject.relatedObject;
  var relatedObjectName:String =
  (_relatedObject == null) ? null: _relatedObject.name;
  trace(eventObject.currentTarget.name, relatedObjectName);
}

Player
ActionScript 3.0/Flash Player 9以降。

出典
[ActionScript 3.0 Language and Components Reference] > [InteractiveObject] > [rollOver Event]


作成者: 野中文雄
作成日: 2007年5月1日


Copyright © 2001-2007 Fumio Nonaka.  All rights reserved.