6

MouseEvent.RIGHT_MOUSE_UP と MouseEvent.RIGHT_MOUSE_DOWN をリッスンできるフラッシュ プレーヤー 11.2 に更新しました。

これらのイベントが対応する MOUSE_UP / MOUSE_DOWN と同じように動作しないという問題があります。具体的には、マウスがどこにあるかに関係なく、MOUSE_UP イベントが起動されます。これにより、Flash ウィンドウの外側にドラッグしても、ユーザーが Flash Player をクリックするたびに完全な down -> up イベント ループを維持できます。

ただし、これは RIGHT_MOUSE_UP / DOWN には当てはまらないようです。プレーヤーの内側を右クリックしてプレーヤーの外側で離すと、RIGHT_MOUSE_UP イベントが発生しません。つまり、UP イベントを受信せずに複数の RIGHT_MOUSE_DOWN イベントを受信する可能性があります。

これに対する既知の回避策はありますか、または設定する必要があるオプションはありますか?

編集 :

コード例を次に示します。

stage.addEventListener(MouseEvent.MOUSE_UP,         onMouseUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN,       onMouseDown);
stage.addeventListener(MouseEvent.RIGHT_MOUSE_UP,   onRightMouseUp);
stage.addeventListener(MouseEvent.RIGHT_MOUSE_DOWN, onRightMouseDown);

//...
//all callback function follow a similar format as :
private function onMouseUp(e : MouseEvent) : void
{
    leftClick_ = false;//signaling that leftClick is not pressed
}
4

1 に答える 1

2

マウスがステージを離れるときにリッスンすることができます。これは、RIGHT_CLICK_UPイベントのプロキシとして機能する可能性があります。

package 
{
    //Imports
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;

    //Class
    [SWF(width="640", height="480", frameRate="60", backgroundColor="0x555555")]
    public class RightClickTest extends Sprite
    {
        //Constructor
        public function RightClickTest()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            addEventListener(Event.ADDED_TO_STAGE, init);
        }

        //Initialize
        private function init(event:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            stage.addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, mouseRightClickEventHandler);
            stage.addEventListener(MouseEvent.RIGHT_MOUSE_UP, mouseRightClickEventHandler);
            stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveEventHandler);
        }

        //Mouse Right Click Event Handler
        private function mouseRightClickEventHandler(event:MouseEvent):void
        {
            switch (event.type)
            {
                case MouseEvent.RIGHT_MOUSE_DOWN:   trace("Right Mouse Down");
                                                    break;

                case MouseEvent.RIGHT_MOUSE_UP:     trace("Right Mouse Up");
            }
        }

        //Mouse Leave Event Handler
        private function mouseLeaveEventHandler(event:Event):void
        {
            trace("Mouse Leave");
        }
    }
}

ただし、ユーザーが複数の右クリックコンテキストメニュー(または同様のもの)を表示できないようにする場合は、コードに簡単なチェックを実装して、新しいメニューを表示する前に、最初に表示されている右クリックコンテキストメニューを非表示にすることができます。

于 2012-04-29T16:15:45.957 に答える