加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – 在AS3中最容易实现onReleaseOutside?

发布时间:2020-12-15 07:27:14 所属栏目:百科 来源:网络整理
导读:我是一个长期的ActionScript 2用户,现在开始使用ActionScript 3.我缺少的一件事是复制AS2的MovieClip.onReleaSEOutside功能的简单方法.几乎总是有必要实现这个事件,否则你会得到一些有趣的错误,比如flash认为你的鼠标已经关闭了. 根据AS2 to AS3 Migration G
我是一个长期的ActionScript 2用户,现在开始使用ActionScript 3.我缺少的一件事是复制AS2的MovieClip.onReleaSEOutside功能的简单方法.几乎总是有必要实现这个事件,否则你会得到一些有趣的错误,比如flash认为你的鼠标已经关闭了.

根据AS2 to AS3 Migration Guide,我应该为此使用flash.display.InteractiveObject.setCapture(),但据我所知,它不存在.我猜这个文件已经过时或不正确.我在网上发现了一些关于如何复制这个功能的帖子,但是他们有自己的问题:

即使没有相应的onPress事件,> This one触发onReleaSEOutside.
> This one看起来非常低效,每次在应用程序内的任何位置单击鼠标时,您都会添加和删除事件监听器.

必须有一个更简单的方法,不要告诉我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之间的区别(例如可拖动项目),您可以跳过按钮本身的鼠标向上监听器(此处用星号表示).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读