1

我遇到了一种不寻常的行为,我似乎无法深究。当我运行它时,如果我在 swf 区域中移动,它通常会在鼠标移动时跟踪。值得期待。

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

这是代码。我已经简化为它的准系统。只需将其放入 Flex 中名为“Engine”的空 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 上删除它。但是这种行为似乎仍然很不寻常,我有兴趣了解它为什么会发生。

谁能告诉我如何将事件限制在应用程序的实际阶段?

4

3 回答 3

1

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

您可以做的是将 MouseEvent 的坐标与舞台的边界进行比较,而忽略外面的那些。

public function mouseMoveHandler(evt:MouseEvent):void
{
    if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth &&
        evt.stageY >= 0 && evt.stageY <= stage.stageHeight)
    {
        trace("move");
    }
}
于 2009-05-31T09:57:25.097 回答
0

如果您在 Flash 电影内部单击并将鼠标拖到外部,则 MOUSE_MOVE 事件将继续触发,直到您松开鼠标。MOUSE_LEAVE 仅当您在播放器外部释放鼠标时才会触发。这就是 Flash Player 的工作方式。

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

于 2009-05-31T09:03:15.627 回答
0

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

这里有一个修复:

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

于 2009-06-16T11:43:27.523 回答