actionscript-3 - 为什么在按下鼠标中键时不发送 MOUSE_MOVE 事件?

标签 actionscript-3 air mouseevent

我正在监听 MOUSE_MOVE 事件。

除非按住鼠标中键,否则发送和接收它们都很好。在释放中间按钮之前,我不会再收到任何 MOUSE_MOVE 事件。

这是 Flash 的问题,还是与我的特定鼠标/计算机配置(Lion 上的蓝牙 Mighty Mouse)有关?

是否有任何已知的解决方法?


这里有一个示例项目来演示这个问题。
左键单击和拖动跟踪鼠标移动事件,但中键单击仅显示鼠标中键按下和鼠标中键弹起。

import flash.events.MouseEvent;

this.stage.addEventListener(MouseEvent.MIDDLE_MOUSE_DOWN, onMiddleMouseDown);
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);

function onMiddleMouseDown(e:MouseEvent):void {
trace("middle down");

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.addEventListener(MouseEvent.MIDDLE_MOUSE_UP, onMiddleMouseUp);
}

function onMouseMove(e:MouseEvent):void {
trace("mouse move");
}

function onMiddleMouseUp(e:MouseEvent):void {
trace("middle up");

this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.removeEventListener(MouseEvent.MIDDLE_MOUSE_UP, onMiddleMouseUp);
}

function onMouseDown(e:MouseEvent):void {
trace("down");

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}

function onMouseUp(e:MouseEvent):void {
trace("up");

this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}

更新:
当按住中间按钮时,鼠标位置(mouseX 和 mouseY 属性)似乎没有更新。我仍然想知道为什么,或者是否有解决方法。

最佳答案

只是一个猜测,但鼠标中键通常在大多数驱动程序中设置为启用滚动。可能意味着当按下按钮时,窗口会收到某种滚动消息,而不是鼠标移动消息。

关于actionscript-3 - 为什么在按下鼠标中键时不发送 MOUSE_MOVE 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611797/

相关文章:

flash - 在 3D 中反转旋转,使对象始终面向相机?

actionscript-3 - 如何使用 Adob​​e Air 下载和解压 .ZIP 文件夹?

android - Air - 如何选择合适的硬件加速模式?

apache-flex - 使标题窗口适合内容

actionscript-3 - 从 Java 到 ActionScript 的类设计挫折

apache-flex - 如何在ActionScript 3.0中找到关联数组的长度?

android - 如何在不删除以前版本生成的数据的情况下安装 AIR android 应用程序

java - 将 MouseListener 或 MouseMotionListener 添加到我的 JLabel(位于我的西洋棋棋盘中的 Jpanel 内部)

python - Python 中的运行时错误

c# - 控件如何处理该控件外的鼠标单击?