我不得不将一些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); }