6

我刚刚更新到允许监听 MouseEvent.RIGHT_MOUSE_UP 和 MouseEvent.RIGHT_MOUSE_DOWN 的 flash player 11.2。

我遇到了一个问题,这些事件与它们的 MOUSE_UP / MOUSE_DOWN 对应物的行为不同。具体来说,无论鼠标在哪里,都会启动 MOUSE_UP 事件。这允许在用户单击 Flash 播放器时将其拖出 Flash 窗口,并且仍然具有完整的向下 -> 向上事件循环。

但是,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 回答