Actionscript 3 AS3鼠标离开问题

Actionscript 3 AS3鼠标离开问题,actionscript-3,Actionscript 3,我正在编写一个拖放应用程序,在这里我可以抓取一个对象,然后将其放置在不同的对象容器上。当我拖动对象(按住鼠标按钮)并离开舞台时,我仍然可以用鼠标控制对象…这不是我想要的 我想在鼠标离开舞台时失去对物体的控制 我试图在MOUSE\u LEAVE事件上删除MOUSE\u DOWN的事件侦听器,但什么都没有 我还尝试在MOUSE\u LEAVE事件上调度MOUSE\u UP事件,但它也不起作用……只有手动释放鼠标按钮,它才能起作用 当用户将鼠标移离屏幕但仍在按下鼠标按钮时,是否有任何方法覆盖鼠标按下事

我正在编写一个拖放应用程序,在这里我可以抓取一个对象,然后将其放置在不同的对象容器上。当我拖动对象(按住鼠标按钮)并离开舞台时,我仍然可以用鼠标控制对象…这不是我想要的

我想在鼠标离开舞台时失去对物体的控制

我试图在MOUSE\u LEAVE事件上删除MOUSE\u DOWN的事件侦听器,但什么都没有

我还尝试在MOUSE\u LEAVE事件上调度MOUSE\u UP事件,但它也不起作用……只有手动释放鼠标按钮,它才能起作用

当用户将鼠标移离屏幕但仍在按下鼠标按钮时,是否有任何方法覆盖鼠标按下事件??? 有什么建议吗


提前感谢

我相信你说的是用户在点击鼠标后完全保留flash内容,当他/她返回时,它会继续这个过程,对吗


我建议您跟踪鼠标的x和y坐标。设置一个条件,当x或y分别等于舞台宽度或高度时,触发鼠标向上事件处理程序。

舞台是否正在监听鼠标离开事件?在任何情况下,请查看本文,它可能有助于:

这里有几个棘手的陷阱,不要落入其中:

一件奇怪的事情是,在Chrome+Firefox中,鼠标离开事件没有被调度为
不透明
透明
。它只是不点火-鼠标向下或向上

使用
窗口
它可以正常工作。我花了很长时间才弄明白!grr


第二,确保对
事件的参数类型使用
Event
。鼠标离开
处理程序,而不是
MouseEvent
。如果您试图用
e:MouseEvent
处理
MOUSE\u LEAVE
,您将得到一个可能永远看不到的错误(除非您使用的是调试flash播放器)。这是一个非常容易犯的错误,因为您可能将所有其他处理程序指向同一个方法

下面是我要做的:(只需从
mouseLeave(e:Event)


当您将对象拖动到flash电影之外时,该对象将触发鼠标退出事件。您可以侦听此事件,使用变量检查对象是否正在被拖动,如果是,则发送鼠标向上事件

some_object.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
some_object.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
some_object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);

private function mouseOutHandler(e:MouseEvent):void
{
    if (isDragging)
        e.target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
}

private function mouseDownHandler(e:MouseEvent):void
{   
    e.target.startDrag();
    isDragging = true;
}

private function mouseUpHandler(e:MouseEvent):void
{   
    e.target.stopDrag();
    isDragging = false;
}

我尝试过这样做,但如果我一直按下鼠标按钮,鼠标向上事件不会被触发…我猜它会被触发一瞬间,然后鼠标向下事件会再次被触发…但当我一直按下鼠标按钮时,它不会被触发。你是对的,与我给你的示例中的情况相同。你尝试过lox吗xy的解决方案?这肯定有效,当鼠标超出边界时,发送MouseUp事件或让舞台发送MouseLeave事件。只要我在将鼠标移出边界时释放鼠标按钮,就可以工作。我设置了x和y限制,因此如果我离开舞台,我的对象会被边界卡住,但我一直按下鼠标按钮。(它不会像示例中那样消失)…谢谢。无论如何,我不久前放弃了Android的Flash开发;)
some_object.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
some_object.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
some_object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);

private function mouseOutHandler(e:MouseEvent):void
{
    if (isDragging)
        e.target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
}

private function mouseDownHandler(e:MouseEvent):void
{   
    e.target.startDrag();
    isDragging = true;
}

private function mouseUpHandler(e:MouseEvent):void
{   
    e.target.stopDrag();
    isDragging = false;
}