API не обязательно отправляет свое собственное событие. Даже если это так, он должен сначала прослушать MouseEvents. Можно было обнаружить двойной щелчок, используя MouseEvent.DOUBLE_CLICK
или прослушивая последовательные MouseEvent.CLICK
или MouseEvent.MOUSE_DOWN
события. Там нет никакого способа (только внутри Flash), чтобы обнаружить двойной щелчок, не прослушивая одно или несколько из этих событий где-то.
Также возможно, что картографический сервис прослушивает событие DOUBLE_CLICK, но вы не отправляете MouseEvent из нужного объекта. Например, если картографический сервис делает это:
mapRoot.mapChild.addEventListener(MouseEvent.DOUBLE_CLICK, performMeasurement);
и вы делаете это:
mapRoot.dispatchEvent(new MouseEvent(MouseEvent.DOUBLE_CLICK));
ничего не произойдет.
Есть и другие возможности:
Когда вы фактически выполняете двойной щелчок мышью, вы вызываете несколько событий:
MOUSE_DOWN, MOUSE_UP, CLICK, MOUSE_DOWN, MOUSE_UP, CLICK, DOUBLE_CLICK
Возможно, картографический сервис прослушивает MOUSE_DOWN и добавляет прослушиватель DOUBLE_CLICK в обработчик MOUSE_DOWN, например:
mapRoot.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler);
private function _mouseDownHandler(event:MouseEvent):void
{
var targ:InteractiveObject = event.target as InteractiveObject;
targ.addEventListener(MouseEvent.DOUBLE_CLICK, _doubleClickHandler);
}
private function _doubleClickHandler(event:MouseEvent):void
{
var targ:InteractiveObject = event.target as InteractiveObject;
targ.removeEventListener(MouseEVent.DOUBLE_CLICK, doubleClickHandler);
performMeasurement();
}
Таким образом, вам может потребоваться отправить комбинацию событий для запуска обработчика.
Вы можете попробовать следующее:
Используйте DisplayObjectContainer.getObjectsUnderPoint()
, чтобы получить массив всех объектов, которые могут реагировать на щелчок. Затем от каждого из объектов в этом массиве попробуйте отправлять различные последовательности MouseEvents, пока не получите правильные события из правильного объекта.
Обратите внимание, что если
areInaccessibleObjectsUnderPoint()
возвращает true для точки, в которой вы тестируете, тогда есть некоторые объекты, к которым вы не сможете получить доступ, и если это те, которые прослушивает картографический сервис, то вам не повезло.