2010-04-07 46 views
3

我只是将这个超级简单的代码示例扔进Flash CS4 IDE框架脚本中,但它不会在控制台中输出任何内容。我只是将鼠标放在窗口上,不点击任何东西,也没有任何事情发生。为什么不按照我的预期工作?Event.MOUSE_LEAVE不能在AS3中工作

stage.addEventListener(Event.MOUSE_LEAVE, traceMouse); 

function traceMouse(Evt:Event):void 
{ 
trace("Mouse Left Stage"); 
} 

________________________________________________

[编辑]我发现Event.MOUSE_LEAVE难以置信没用。首先,它在测试环境中不起作用(至少在Mac OS X上为Flash CS4)。第二,它不火,如果是的MouseEvent.MOUSE_DOWN当前活动:

Flash CS4 Professional中的ActionScript 3.0语言参考:

更新09年8月11日:新增资格 不触发该事件时,按钮按下了 。 1

在我的特定情况下,我想MOUSE_LEAVE到,而我,这样的情况下,用户拖动他/她的鼠标指针从舞台这将触发调用stopDrag()拖着一个对象触发。因为这是不可能的,我决定在实际对象上使用MOUSE_OUT,而不是在对象的父级或舞台上使用MOUSE_LEAVE。

private function mouseDownHandler(evt:MouseEvent):void 
    { 
    object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); 
    object.startDrag(false, pullBounds); 
    } 

private function mouseUpHandler(evt:MouseEvent):void 
    { 
    object.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); 
    object.stopDrag(); 
    } 

private function mouseOutHandler(evt:MouseEvent):void 
    { 
    object.stopDrag(); 
    } 
+0

它的工作原理在Flash CS4 IDE对我来说(Win XP的),但事实上,同时按下鼠标的它不工作使它完全没用,Adobe现在真的很烦人,顺便说一句,你在哪找到这个注释?这个链接doe没有工作。 – 2011-04-12 16:57:33

+0

它是在flash 10.1的flash.display.Stage.mouseLeave的10.0文档中编写的,但它们似乎有删除它 – TheDarkIn1978 2011-04-13 02:42:17

回答

1

我不认为在创作环境中,该特定事件的作品,尝试发布HTML包装,并在浏览器中运行它。

+0

在发布之前我发现了这个问题,看起来有些人不能使用IDE来工作,而另一些人认为他们是疯狂的,并且对他们的工作没有任何问题,它可能是一组婷?是的它在浏览器中发布时对我有用 – TheDarkIn1978 2010-04-07 21:23:00

+1

它可能是操作系统相关的东西,我尽可能远离Flash编写代码类型的东西,所以我从未真正遇到过这个问题。 – grapefrukt 2010-04-07 21:59:29

+0

这是一个聪明的理论。如果你是正确的,我不会感到惊讶,因为MouseEvent.MOUSE_WHEEL在Mac OS X上根本不起作用(这就是我使用的) – TheDarkIn1978 2010-04-07 22:27:38

3

这里有一对夫妇的其他技巧性的东西就知道(在浏览器中运行时):

一个奇怪的事情是,在Chrome + Firefox中,则不会调度为OPAQUETRANSPARENT一个WMODE的MOUSE_LEAVE事件。它只是不开火 - 鼠标向下或向上。

WINDOW它工作正常。那一个花了我很长时间才发现! GRR ... http://bugs.adobe.com/jira/browse/FP-892


第二,确保你使用Event的参数类型,请Event.MOUSE_LEAVE处理程序,而不是MouseEvent。如果您尝试使用e:MouseEvent来处理MOUSE_LEAVE,则会出现一个您可能永远不会看到的错误(除非您使用的是调试闪存播放器)。这是一个非常容易犯的错误,因为你可能会指示所有其他处理程序采用相同的方法。

这里是我做的:(只是我的主要endDragmouseLeave(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

@ TheDarkIn 1978我意识到你没有在这里犯第二个错误 - 但我总是忘记这一点,它可能很容易错过 – 2011-05-18 19:59:17

相关问题