2011-05-13 5 views
0

현재지도 API의 그리기 도구로 작업 중이며 마우스를 두 번 누를 때마다지도 서비스가 측정을 수행하고 내가 그리는 선.마우스를 두 번 클릭하면 어떤 이벤트가 전달되는지 디버그합니다.

MouseEvent.DOUBLE_CLICK를 전달하여이 두 번 클릭을 모방하려고하지만 맵 서비스가이 기본 Flex 이벤트를 수신하지 않습니다. 나는 API가 맞춤 MapMouseEvent 또는 사용자가 마우스를 두 번 클릭 할 때 전달되는 것과 비슷한 것을 생성했다고 생각합니다.

마우스를 두 번 클릭 할 때 어떤 이벤트가 전달되는지 확인하는 방법이 있습니까?

+2

이 질문은 유사합니다 - http://stackoverflow.com/questions/3875748/listen-to-all-event-types-of-an-eventdispatcher – prototypical

답변

0

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을 수신하는 것이 가능하고,이처럼 MOUSE_DOWN 핸들러 내부의 DOUBLE_CLICK 리스너를 추가합니다

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를 반환하면 액세스 할 수없는 일부 개체가 있고지도 서비스가 수신 대기중인 개체가있는 경우, 그럼 너는 운이 없어.

+0

도움을 주셔서 감사합니다. 여기에 훌륭한 아이디어가 있습니다. – Kyle

-2
public function cbMouseEvents(e:MouseEvent):void{ 
    trace(e.type) 
} 
+0

-1. 여전히 이벤트 리스너를 추가해야하며 구체적이어야합니다. 모든 이벤트를 듣는 '일반적인'방법은 없습니다. –

+0

그는 질문에 명시된 바와 같이 마우스 클릭을 원했습니다. –

관련 문제