トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

マウスイベント_Flex

マウスイベント

マウスプッシュ、マウスアップ、マウスムーブイベントが発生すると、登録した関数が呼び出されるようにします。

なお、マウスイベントを取得するには、

 import flash.events.*;

を記述しておく必要があります。

package {
   import flash.display.*;
   import flash.text.*;
   import flash.utils.*;
   import flash.events.*;

   public class MouseTest extends Sprite {
       private var m_Text:TextField;
       private var m_child:Sprite;         ///< ビットマップを貼り付けるスプライト

       public function MouseTest() {
           // 子のスプライトを作成
           m_child = new Sprite();

           // スプライト内をクリア(スプライトのサイズ固定用)
           m_child.graphics.clear();
           m_child.graphics.beginFill(0xe0ffe0);
           m_child.graphics.drawRect(0, 0, 300, 100);
           m_child.graphics.endFill();

           // テキストフィールドの作成
           m_Text = new TextField();
           m_Text.x = 8;
           m_Text.y = 8;
           m_Text.autoSize = "left";
           m_Text.textColor = 0x000000;
           m_Text.text = "";
           m_Text.selectable = false;
           m_child.addChild(m_Text);

           // ルートのSpriteに子のスプライトを追加
           addChild(m_child);

           // マウスイベントの追加
           m_child.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
           m_child.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
           m_child.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
       }
       
       /**
        * マウスダウン
        */
       private function onMouseDown(event:MouseEvent):void {
           var mx:int, my:int;
           
           // マウス位置
           mx = event.localX;
           my = event.localY;

           // マウスダウン時にフォーカスをあわせる
           // stage.focus = m_child;
           
           m_Text.text = "mouseDown : " + String(mx) + ", " + String(my);
       }

       /**
        * マウスアップ
        */
       private function onMouseUp(event:MouseEvent):void {
       }

       /**
        * マウス移動
        */
       private function onMouseMove(event:MouseEvent):void {
           var mx:int, my:int;
           
           // ボタンプッシュでない場合はスキップ
           if(!event.buttonDown) return;
           
           // マウス位置
           mx = event.localX;
           my = event.localY;
           
           m_Text.text = "mouseMove : " + String(mx) + ", " + String(my);
       }
   }
}

上記を実行すると、以下のようになります(マウスドラッグでマウス位置が左上に表示されます)。

イベントの登録

マウスイベントの登録は、

addChild(m_child);

で、対象Spriteを親に登録してから、「m_child.stage」に対してaddEventListenerします。

m_child.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
m_child.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
m_child.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);

こうすることで、フォーカスがあっていない状態でもマウスイベントが取得できるようになります。

「MouseEvent.MOUSE_DOWN」は、マウスプッシュされたときに第二引数の関数を呼びます。

「MouseEvent.MOUSE_UP」は、マウスアップされたときに第二引数の関数を呼びます。

「MouseEvent.MOUSE_MOVE」は、マウスが移動されたときに第二引数の関数を呼びます。

ここで、

m_child.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
m_child.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
m_child.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);

のように「stage」を省いた状態でイベント登録もできます。この場合は、マウスダウンイベント時に

stage.focus = m_child;

のようにしてフォーカスをあわせるSpriteを明示する必要があります(特にキーダウンイベントなどを取得するために)。このとき、対象の領域に黄色の枠がつきます。

と、少し不恰好になるため「m_child.stage」にイベントを登録しておくほうがいいかもしれません。

イベントがきたときに呼ばれる関数

private function onMouseDown(event:MouseEvent):void {
}
private function onMouseUp(event:MouseEvent):void {
}
private function onMouseMove(event:MouseEvent):void {
}

のような書式で第一引数にMouseEvent型のクラスを指定します。

マウス位置の取得

var mx:int, my:int;
mx = event.localX;
my = event.localY;

のようにlocalX、localYでマウス位置を取得できます。

マウスの押下状態の取得

「event.buttonDown」がtrueの場合は、マウスがプッシュされています。マウスムーブ時のドラッグ検出はこれを見るとよいです。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.