在AS3中最简单的onReleaseOutside实现?
我是一个长期使用ActionScript 2的用户,现在开始使用ActionScript 3.我缺少的一件事是复制AS2的MovieClip.onReleaseOutside功能的简单方法。实现这个事件几乎总是有必要的,否则你会得到一些有趣的错误,比如闪光灯认为你的鼠标真的弹起来了。在AS3中最简单的onReleaseOutside实现?
根据AS2 to AS3 Migration Guide,我应该使用flash.display.InteractiveObject.setCapture()
这个,但它不存在,据我所知。我猜这个文件已经过时或不正确。我发现如何复制此功能在网络上的几个职位,但他们要么有自己的问题:
必须有一个更简单的方法,不要告诉我Adobe重写Actionscript时忘了这个吗?
示例AS2代码:
// Assume myMC is a simple square or something on the stage
myMC.onPress = function() {
this._rotation = 45;
}
myMC.onRelease = myMC.onReleaseOutside = function() {
this._rotation = 0;
}
没有onReleaseOutside在处理程序,如果你在squre压下去,拖你的鼠标在它之外,并释放鼠标,那么方不会取消旋转,并似乎卡住了。
简单,万无一失:
button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
button.addEventListener(MouseEvent.MOUSE_UP, buttonMouseUpHandler); // *
function mouseDownHandler(event : MouseEvent) : void {
trace("onPress");
// this will catch the event anywhere
event.target.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
function buttonMouseUpHandler(event : MouseEvent) : void {
trace("onRelease");
// don't bubble up, which would trigger the mouse up on the stage
event.stopImmediatePropagation();
}
function mouseUpHandler(event : MouseEvent) : void {
trace("onReleaseOutside");
event.target.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
如果你不关心(例如用拖动的项目函数)onRelease和onReleaseOutside在之间的区别,你的跳过按钮本身鼠标向上监听器(在这里评论星号)。
有你看着这个事件:
flash.events.Event.MOUSE_LEAVE
从文档:
由Stage对象进行调度当鼠标指针移出舞台区域。 Event.MOUSE_LEAVE常量定义mouseLeave事件对象的type属性的值。
如果你只关心它会解决你的问题是否与用户的鼠标,如果离开了舞台,而不仅仅是特定的影片剪辑之外。
root.addEventListener(MouseEvent.UP,onMouseReleaseOutside);
你当然定义onMouseReleaseOutside。基本上任何MouseEvent.UP(一个鼠标释放)发生在你的按钮(或mc)之外,都会触发舞台而不是你的按钮。这是我通常抓住它的方式。
我从AS2移到了Flex 3,所以没有遇到这个问题。所以虽然我不能提供答案,但请注意这个问题。干杯。 – 2008-10-31 22:46:38
如果您在舞台的空白区域释放,这将会很好。如果你在舞台上释放一个未知的精灵,该怎么办?或者如果有多个按钮需要检查releaseOutside? – 2012-01-12 21:47:57