Actionscript 3 Event.MOUSE\u离开时不在AS3中工作
我刚刚将这个超级简单的代码示例扔进了一个Flash CS4 IDE框架脚本,但它在控制台中没有输出任何内容。我只是在窗口上滚动鼠标,没有点击任何东西,什么也没有发生。为什么这不能像我期望的那样工作Actionscript 3 Event.MOUSE\u离开时不在AS3中工作,actionscript-3,mouseevent,Actionscript 3,Mouseevent,我刚刚将这个超级简单的代码示例扔进了一个Flash CS4 IDE框架脚本,但它在控制台中没有输出任何内容。我只是在窗口上滚动鼠标,没有点击任何东西,什么也没有发生。为什么这不能像我期望的那样工作 stage.addEventListener(Event.MOUSE_LEAVE, traceMouse); function traceMouse(Evt:Event):void { trace("Mouse Left Stage"); } \Uuuuuuuuuuuuuuuuuuuuuuu
stage.addEventListener(Event.MOUSE_LEAVE, traceMouse);
function traceMouse(Evt:Event):void
{
trace("Mouse Left Stage");
}
\Uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
[编辑]我发现Event.MOUSE\u的离开毫无用处。首先,它在测试环境中不起作用(至少在MacOSX的FlashCS4上是这样)。其次,如果MouseEvent.MOUSE_DOWN当前处于活动状态,则不会触发:
Flash CS4 Professional ActionScript 3.0语言参考:
更新日期:2009年8月11日:新增资格
按下按钮时不会触发该事件
按
在我的特殊情况下,我希望鼠标在拖动对象时能够启动,这样,如果用户将鼠标指针从舞台上拖下来,它就会启动stopDrag()。由于这是不可能的,我决定在实际对象上使用鼠标离开,而不是在对象的父对象或舞台上使用鼠标离开
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();
}
我认为此特定事件在创作环境中不起作用,请尝试发布html包装并在浏览器中运行它。以下是一些需要了解的其他技巧(在浏览器中运行时): 一件奇怪的事情是,在Chrome+Firefox中,鼠标离开事件没有被调度为
不透明
或透明
。它只是不点火-鼠标向下或向上
使用窗口
它可以正常工作。我花了很长时间才弄明白!grr
第二,确保对
事件的参数类型使用Event
。鼠标离开处理程序,而不是MouseEvent
。如果您试图用e:MouseEvent
处理MOUSE\u LEAVE
,您将得到一个可能永远看不到的错误(除非您使用的是调试flash播放器)。这是一个非常容易犯的错误,因为您可能将所有其他处理程序指向同一个方法
下面是我要做的:(只需从mouseLeave(e:Event)
在发布之前,我在谷歌上搜索了这一期。似乎有些人无法让它与IDE协同工作,而其他人则认为他们疯了,它对他们有效。这可能是一种设置吗?是的,它在浏览器中发布时对我有效。它可能依赖于操作系统或其他什么,我尽可能远离c的flash创作ode类型的东西,所以我从来没有真正遇到过。这是一个聪明的理论。如果你是正确的,我不会感到惊讶,因为MouseEvent.MOUSE_WHEEL在Mac OS X上根本不工作(这就是我正在使用的),它在Flash CS4 IDE中为我工作(Win XP)但事实上,当鼠标被按下时它就不工作了,这让它完全没有用。Adobe最近真的让我很恼火。顺便说一句,你在哪里找到了这张便条?这个链接不起作用。它写在Flash 10.1的10.0文档中,位于Flash.display.Stage.mouseLeave下,但他们似乎已经把它删除了。@1978年的马克我意识到你没有做这个链接第二个错误在这里-但我总是忘记这一点,很容易错过
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
}