The*_*heo 1 flash actionscript-2
我不得不将一些ActionScript 3代码下载到ActionScript 2并且我在检测鼠标何时离开舞台时遇到问题.
在ActionScript 3中有一个名为的事件Event.MOUSE_LEAVE,可用于检测鼠标何时离开舞台,但在我看到的情况下,ActionScript 2中没有相应的事件.
您最好如何模拟相同的功能?
听鼠标移动并根据舞台边界检查鼠标坐标不起作用,因为当鼠标离开舞台时鼠标坐标停止更新.
我还没有找到一种可靠的方法在AS2中执行此操作(在某些浏览器上,当鼠标在应用程序之外时,您甚至会继续获取鼠标更新).所以我通常做的是检查鼠标是否在应用程序的外部10或20px边界之外,如果是,我将其视为MOUSE_LEAVE.听取MOUSE_MOVE而不是每帧都检查一下可能会更好,因为如果你的帧率较低,你可能会错过一些更新.
也可以调出上下文菜单,将鼠标移到外面,然后完全点击上面的整个检查(或者甚至快速移动鼠标经过边框),所以我经常添加一个计时器,在鼠标移动后触发t动了2-3秒.
它不是特别强大,但它是我管理的最好的.
(按照Theo的第3个选项执行.)
// 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11194 次 |
| 最近记录: |