AS3中Event.MOUSE_LEAVE无法工作

3

我刚刚把这个超级简单的代码示例放到了Flash CS4 IDE帧脚本中,但它在控制台中没有输出任何内容。我只是在窗口上滚动鼠标,没有点击任何东西,也没有发生任何事情。为什么它不能按照我的期望工作呢?

stage.addEventListener(Event.MOUSE_LEAVE, traceMouse);

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

________________________________________________

[编辑] 我发现Event.MOUSE_LEAVE非常无用。首先,在测试环境中它不起作用(至少在Flash CS4 for Mac OS X上)。其次,如果MouseEvent.MOUSE_DOWN当前处于活动状态,则不会触发它:

Flash CS4专业版ActionScript 3.0语言参考:

更新于8/11/09:添加了限定条件,即当按钮按下时不会触发事件。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();
  }

它在Flash CS4 IDE中对我(Win XP)有效,但事实上,当鼠标按下时它不起作用,这使得它完全无用。Adobe最近真的让我很恼火。顺便问一下,你在哪里找到这个注释?那个链接不起作用。 - daniel.sedlacek
它曾经写在Flash 10.1的10.0文档中的flash.display.Stage.mouseLeave下,但他们似乎已经将其删除。 - Chunky Chunk
2个回答

3

以下是几个需要注意的技巧(在浏览器中运行时):

一个奇怪的事情是,在Chrome + Firefox中,对于OPAQUETRANSPARENTWMODE,MOUSE_LEAVE事件不会被触发。它就是不会触发——无论是鼠标按下还是松开。

使用WINDOW则没有问题。这个问题花了我很长时间才找到!啊... http://bugs.adobe.com/jira/browse/FP-892


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

这是我的做法:(只需从mouseLeave(e:Event)调用我的主要endDrag即可)

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
@TheDarkIn1978 我知道你在这里没有犯第二个错误 - 但我总是会忘记这一点,而且很容易错过。 - Simon_Weaver

1

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


在发布之前,我在谷歌上搜索了这个问题。似乎有些人无法在IDE中使其正常工作,而其他人则认为他们疯了,因为它对他们来说没有问题。可能是设置的问题吗?是的,在浏览器中发布后,它对我有效。 - Chunky Chunk
1
有可能与操作系统相关,或者其他什么问题,我尽量避免在Flash制作方面涉及到代码部分,所以我从来没有真正遇到过这种情况。 - grapefrukt
那是一个聪明的理论。如果你是正确的,我不会感到惊讶,因为MouseEvent.MOUSE_WHEEL在Mac OS X上根本不起作用(这就是我正在使用的操作系统)。 - Chunky Chunk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接