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的工作原理。
也许我错了,但我不认为你可以改变这种行为。
答
如前所述,您无法阻止这些事件发生。触发它们直到释放鼠标。
你可以做的是比较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/
是的,这将使意义。这不是我所指的行为。如果我在屏幕上单击* ANYWHERE * ...另一个应用程序,苹果酒吧,无论...它注册一个移动事件。即使Flash没有可能的重点。 – grey 2009-05-31 16:34:53
对不起,我无法用您的代码重现此行为。 你能发表更多意思...... FP版本,操作系统,... – 2009-05-31 17:23:21