我有一种不寻常的行为,我似乎无法深究。当我运行它时,如果我移动到swf区域,它会在鼠标移动时正常跟踪。可以预料。
但是,当我点击屏幕上的任何位置时,它会跟踪移动事件。如果我单击并拖动,它就会跟踪浏览器的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上删除它。但这种行为似乎仍然很不寻常,我有兴趣了解它为什么会发生。
有人能告诉我如何将事件限制在应用程序的实际阶段吗?
答案 0 :(得分: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");
}
}
答案 1 :(得分:0)
如果您在Flash影片中单击并将鼠标拖到其外部,则MOUSE_MOVE事件将继续触发,直到您释放鼠标。只有在播放器外部释放鼠标时,MOUSE_LEAVE才会触发。这就是Flash Player的工作方式。
也许我错了,但我认为你不能改变这种行为。
答案 2 :(得分:0)
好的,这是一个只在Mac上发生的已知错误。
这里有一个修复:
http://www.visible-form.com/blog/transformmanager-fix-for-mac-firefox/