Почему события MOUSE_MOVE не отправляются при нажатии средней кнопки мыши? - PullRequest
3 голосов
/ 08 марта 2012

Я слушаю события MOUSE_MOVE.

Они отправляются и принимаются просто отлично, если не удерживать среднюю кнопку мыши.Я не получаю больше событий MOUSE_MOVE, пока не отпущена средняя кнопка.

Это проблема с Flash или что-то связанное с моей конкретной конфигурацией мыши / компьютера (bluetooth Mighty Mouse on Lion)?

Есть ли какие-нибудь известные обходные пути?


Вот пример проекта, демонстрирующий проблему.
Левый щелчок и перетаскивание отслеживают события перемещения мыши, но средний щелчок показывает только среднюю мышь вниз исредняя мышь вверх.

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) не обновляются при удерживании средней кнопки,Я все еще хотел бы знать, почему, или если есть обходной путь для этого.

Ответы [ 3 ]

0 голосов
/ 08 марта 2012

Вам абсолютно необходимо событие MOUSE_MOVE?В большинстве случаев событие ENTER_FRAME может заменить его довольно хорошо.

addEventListener(Event.ENTER_FRAME, eFrame);
private function eFrame(event:Event):void
{
   trace(mouseX,mouseY);
}
0 голосов
/ 21 августа 2014

Похоже, это была ошибка в Flash Player для Mac.
Adobe исправила это:
https://bugbase.adobe.com/index.cfm?event=bug&id=3674152

0 голосов
/ 08 марта 2012

Просто предположение, но в большинстве драйверов для включения прокрутки обычно установлена ​​средняя кнопка мыши.Возможно, это означает, что вместо сообщений о перемещении мыши окно получает какие-то сообщения прокрутки, пока кнопка нажата.

...