AS3 MOUSE_LEAVE问题

时间:2010-09-14 16:04:54

标签: actionscript-3

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

当鼠标离开舞台时,我想失去对象的控制权。

我尝试在MOUSE_LEAVE事件中删除MOUSE_DOWN的事件侦听器,但没有。

我还尝试在MOUSE_LEAVE事件上调度一个MOUSE_UP事件,但它也不起作用......只有在我手动释放鼠标按钮时它才有效。

当用户将鼠标移离屏幕但是他仍然按下鼠标按钮时,有没有办法覆盖MOUSE_DOWN事件? 任何建议???

提前致谢

4 个答案:

答案 0 :(得分:1)

舞台实际上是在听MOUSE_LEAVE事件吗?无论如何,请查看这篇文章,它可能有所帮助: http://www.kirupa.com/developer/flashcs3/detecting_when_mouse_leaves_movie.htm

答案 1 :(得分:1)

这里有几个棘手的陷阱:

奇怪的是,在Chrome + Firefox中,不会为OPAQUE TRANSPARENTWINDOW调度MOUSE_LEAVE事件。它只是不会发射 - 鼠标向下或向上。

使用Event它可以正常工作。那个花了我很长时间才发现! grr ... WMODE


其次,请确保您使用Event.MOUSE_LEAVE作为MouseEvent处理程序的参数类型,而不是MOUSE_LEAVE。如果您尝试使用e:MouseEvent处理endDrag,您将收到一个您可能永远看不到的错误(除非您使用的是调试Flash播放器)。这是一个非常容易犯的错误,因为你可能将所有其他处理程序指向同一个方法。

以下是我的工作:(只需从mouseLeave(e:Event)

打电话给我的主stage.addEventListener(MouseEvent.MOUSE_MOVE, drag); stage.addEventListener(MouseEvent.MOUSE_UP, endDrag); stage.addEventListener(Event.DEACTIVATE, endDrag); stage.addEventListener(Event.MOUSE_LEAVE, mouseLeave); private function mouseLeave(e:Event):void { endDrag(new MouseEvent("MOUSE_LEAVE")); } public function endDrag(evt:MouseEvent):void { /// handle end drag }
{{1}}

答案 2 :(得分:0)

我相信你在谈论用户点击鼠标完全离开Flash内容,当他/她返回时,它会继续进行吗?

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

答案 3 :(得分:0)

在flash影片外拖动对象时,该对象将触发MOUSE_OUT事件。您可以侦听此事件,使用变量检查是否正在拖动对象,如果是,则调度MOUSE_UP事件。

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;
}