我是 ActionScript 2 的长期用户,现在开始使用 ActionScript 3。我缺少的一件事是复制 AS2 MovieClip.onReleaseOutside 功能的简单方法。几乎总是有必要实现这个事件,否则你会得到一些有趣的错误,比如flash认为你的鼠标已经按下,而实际上它是向上的。
根据AS2 到 AS3 迁移指南 http://livedocs.adobe.com/flex/2/langref/migration.html,我应该使用flash.display.InteractiveObject.setCapture()
但据我所知,它并不存在。我猜这个文档已经过时或不正确。我在网上找到了一些关于如何复制此功能的帖子,但它们都有自己的问题:
-
This one http://www.arpitonline.com/blog/?p=33即使没有相应的 onPress 事件,也会触发 onReleaseOutside。
-
似乎效率很低,每次在应用程序内的任意位置单击鼠标时,您都将添加和删除事件侦听器。
一定有更简单的方法,别告诉我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;
}
如果没有“释放外部”处理程序,如果您按下正方形,将鼠标拖动到其外部,然后释放鼠标,则正方形将不会取消旋转,并且看起来会被卡住。
简单又万无一失:
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 之间的差异(例如可拖动项目),您可以跳过按钮本身上的鼠标向上侦听器(此处用星号注释)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)