AS3项目 - 鼠标移动侦听器在应用程序外面发生反应

问题描述:

我收到了一个不寻常的行为,我似乎无法触及它的底部。当我运行这个时,如果我移动到swf区域,它通常会在鼠标移动时跟踪。预计。AS3项目 - 鼠标移动侦听器在应用程序外面发生反应

但是,当我在屏幕上点击任意位置时,它会跟踪移动事件。如果我点击并拖动,它就会像在浏览器的swf区域中一样移动。

这是代码。我简化了它的准系统。只需将它放入Flex中名为“引擎”的空AS3项目中 - 显然没有引号。

package { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

[SWF(width='640', height='360', backgroundColor='#888888', frameRate='31')] 
public class Engine extends Sprite 
{  
    public function Engine() 
    { 
     // Add the mouse handlers 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
    } 

    public function mouseMoveHandler(evt:MouseEvent):void 
    { 
     trace("move"); 
    } 
} 
} 

作为一种解决方法,我添加了MOUSE_MOVE一个MOUSE_OVER并在MOUSE_OUT上将其删除。但是,这种行为似乎仍然很不寻常,我很想理解它为什么会发生。

任何人都可以告诉我如何将事件限制在应用程序的实际阶段?

如果您在您的Flash影片内单击并将鼠标拖出它,MOUSE_MOVE事件将继续触发,直到您释放鼠标。 MOUSE_LEAVE只有在您将鼠标释放到播放器外时才会触发。这是Flash Player的工作原理。

也许我错了,但我不认为你可以改变这种行为。

+1

是的,这将使意义。这不是我所指的行为。如果我在屏幕上单击* ANYWHERE * ...另一个应用程序,苹果酒吧,无论...它注册一个移动事件。即使Flash没有可能的重点。 – grey 2009-05-31 16:34:53

+0

对不起,我无法用您的代码重现此行为。 你能发表更多意思...... FP版本,操作系统,... – 2009-05-31 17:23:21

如前所述,您无法阻止这些事件发生。触发它们直到释放鼠标。

你可以做的是比较MouseEvent的坐标和舞台的边界,并忽略那些外部的边界。

public function mouseMoveHandler(evt:MouseEvent):void 
{ 
    if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth && 
     evt.stageY >= 0 && evt.stageY <= stage.stageHeight) 
    { 
     trace("move"); 
    } 
} 

好的,这是一个已知的错误,只发生在Mac上。

这里有一个修复:

http://www.visible-form.com/blog/transformmanager-fix-for-mac-firefox/