Эмуляция мыши Event AS3 - PullRequest
       4

Эмуляция мыши Event AS3

0 голосов
/ 13 октября 2009

У меня есть проект, который включает в себя опрос аппаратного переключателя при каждом обновлении и преобразование его состояний в пользовательские события:

ToggleSwitchEvent.BackWardButtonDown
ToggleSwitchEvent.BackWardButtonUp
ToggleSwitchEvent.Click
etc ....

Аппаратный переключатель действует аналогично двухкнопочной мыши. Поэтому я хотел бы иметь возможность «внедрить» пользовательские события ToggleSwitchEvent в список отображения и заставить его действовать так же, как MouseEvent, всплывая из объекта InteractionObject, с которым пересекается щелчок. Это позволило бы мне добавитьEventListener в список отображения так же, как я делаю с MouseEvents.

Насколько я понимаю, проблема в том, что мне потребуется ссылка на конечные узлы DisplayList для ручной вставки моего ToggleSwitchEvent. Я хотел бы сказать, что переключатель был нажат в определенной позиции на экране, и чтобы DisplayList выяснил, что InteractionObject пересекает щелчок, и отправил мой ToggleSwitchEvent вместо MouseEvent.

Есть ли способ эмулировать MouseEvent в AS3, но с использованием пользовательского события?

1 Ответ

2 голосов
/ 13 октября 2009

Я не совсем понимаю ... Вы хотите, чтобы пользовательское событие вспыхнуло или сработало MouseEvent s самостоятельно?

  1. любое событие будет пузыриться, как ожидалось, если его свойство bubbles установлено в true ...
  2. если вы отправляете события мыши вручную, они также будут пузыриться, и даже их stageX и stageY рассчитываются соответствующим образом ...

ну тогда удачи ...;)


редактирование:

хорошо, ну, список отображения на самом деле не позаботится об этом за вас ... на самом деле, у вас есть два варианта ... начать с этапа и пробиться через него, всегда оставаясь под мышкой ... или, начните с объекта под мышью, найдите его путь в дереве и найдите правильный InteractiveObject в его родительской цепочке ... последнее можно сделать с помощью DisplayObjectContainer::getObjectsUnderPoint ... вот код ...

public static function dispatchEventUnderMouse(event:Event, stage:Stage, point:Point):Boolean {
    //return if stage is disabled
    if (!stage.mouseEnabled) return false;
    //find the topmost object
    var cur:DisplayObject = stage.getObjectsUnderPoint(point).pop();
    if (cur == null) cur = stage;
    //build the path
    var path:Array = [];
    while (cur != null) {
        path.push(cur);
        cur = cur.parent;
    }
    //traverse the path from the root to find the right InteractiveObject
    while (path.length > 0) {
        cur = path.pop();
        if (cur is InteractiveObject) {
            if (!(cur as InteractiveObject).mouseEnabled) {
                cur = cur.parent;
                break;
            }
            if (cur is DisplayObjectContainer) {
                if (!(cur as DisplayObjectContainer).mouseChildren) break;
            }
        }
        else {
            cur = cur.parent;
            break;                  
        }
    }
    return cur.dispatchEvent(event);
}

вы, возможно, захотите ввести правильные координаты в событие, но я думаю, вы поймете это ...;)


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...