Flash 在ActionScript 2中,如何检测鼠标何时离开舞台?
我运气不好,不得不将一些ActionScript3代码下载到ActionScript2,我在检测鼠标何时离开舞台时遇到问题 在ActionScript 3中有一个名为Flash 在ActionScript 2中,如何检测鼠标何时离开舞台?,flash,actionscript-2,Flash,Actionscript 2,我运气不好,不得不将一些ActionScript3代码下载到ActionScript2,我在检测鼠标何时离开舞台时遇到问题 在ActionScript 3中有一个名为event.MOUSE_LEAVE的事件,可用于检测鼠标何时离开舞台,但据我所知,ActionScript 2中没有类似的事件 您如何最好地模拟相同的功能 监听鼠标移动并根据阶段边界检查鼠标坐标不起作用,因为当鼠标离开阶段时,鼠标坐标停止更新。我在AS2中找不到可靠的方法来做到这一点(在某些浏览器上,当鼠标在应用程序外时,您甚至会不
event.MOUSE_LEAVE
的事件,可用于检测鼠标何时离开舞台,但据我所知,ActionScript 2中没有类似的事件
您如何最好地模拟相同的功能
监听鼠标移动并根据阶段边界检查鼠标坐标不起作用,因为当鼠标离开阶段时,鼠标坐标停止更新。我在AS2中找不到可靠的方法来做到这一点(在某些浏览器上,当鼠标在应用程序外时,您甚至会不断获得鼠标更新)。因此,我通常做的是检查鼠标是否在应用程序的外部10或20px边界之外,如果是这样,我认为这是鼠标离开。听鼠标移动可能比每帧检查鼠标移动更好,因为如果帧速率较低,可能会错过一些更新 也可以打开关联菜单,将鼠标移到外面,然后完全绕过上面的整个检查单击(甚至可以将鼠标快速移动到边界之外),因此我经常添加一个计时器,在鼠标在2-3秒内没有移动后触发
它不是特别健壮,但这是我管理过的最好的工具。在AS2中,我还没有找到一种可靠的方法来实现这一点(在某些浏览器上,当鼠标在应用程序之外时,您甚至会不断获得鼠标更新)。因此,我通常做的是检查鼠标是否在应用程序的外部10或20px边界之外,如果是这样,我认为这是鼠标离开。听鼠标移动可能比每帧检查鼠标移动更好,因为如果帧速率较低,可能会错过一些更新 也可以打开关联菜单,将鼠标移到外面,然后完全绕过上面的整个检查单击(甚至可以将鼠标快速移动到边界之外),因此我经常添加一个计时器,在鼠标在2-3秒内没有移动后触发
它不是特别坚固,但这是我管理过的最好的。我想我曾经通过在舞台边缘放置不可见的按钮并使用它们的卷展功能来解决这个问题。我认为只要他们不太快地移动鼠标,这就行了!然而,遥远的记忆 我想我曾经通过在舞台边缘放置不可见的按钮并使用它们的卷展功能来解决这个问题。我认为只要他们不太快地移动鼠标,这就行了!然而,遥远的记忆 此问题有三类解决方案:
此问题有三类解决方案:
//舞台卷展栏检测:
私有变量鼠标_dx:编号;
私有变量:数字;
私有函数detectMouseOutOfBounds():Void{
鼠标_dx=_xmouse;
鼠标_dy=_ymouse;
var mouseListener:Object={};
mouseListener.onMouseMove=委托.create(此,
函数(){
mouse\u dx=Math.abs(mouse\u dx-\u xmouse);
mouse\u dy=Math.abs(mouse\u dy-\u ymouse);
var-speed:Number=Math.max(mouse\u-dx,mouse\u-dy)+5;//添加了预防性缓冲区。
变量willBeOutOfBounds:Boolean=(
_xmouse-速度<0 | |
_X移动+速度>舞台宽度||
_ymouse-速度<0||
_Y使用+速度>舞台高度
);
如果(将超出边界){
_显示。α=10;
}否则{
_显示=
// Stage rollout detection:
private var mouse_dx:Number;
private var mouse_dy:Number;
private function detectMouseOutOfBounds ():Void {
mouse_dx = _xmouse;
mouse_dy = _ymouse;
var mouseListener:Object = { };
mouseListener.onMouseMove = Delegate.create(this,
function () {
mouse_dx = Math.abs(mouse_dx-_xmouse);
mouse_dy = Math.abs(mouse_dy-_ymouse);
var speed:Number = Math.max(mouse_dx, mouse_dy) + 5; // Precautionary buffer added.
var willBeOutOfBounds:Boolean = (
_xmouse - speed < 0 ||
_xmouse + speed > Stage.width ||
_ymouse - speed < 0 ||
_ymouse + speed > Stage.height
);
if (willBeOutOfBounds) {
_display._alpha = 10;
} else {
_display._alpha = 100;
}
mouse_dx=_xmouse;
mouse_dy = _ymouse;
}
);
Mouse.addListener(mouseListener);
}