2011-08-08 6 views
0

MouseEvent.CLICK 수신기가있는 단추가 있습니다. CLICK 이벤트는 버튼을 누를 때 트리거되며 마우스를 내린 상태에서 아래로 내린 다음 버튼에 다시 롤아웃 할 때 해제됩니다. 이 문제가 발생하지 않도록하려면 단추를 끌 때 click 이벤트가 발생하지 않아야합니다.AS3 : 드래그 앤 드롭 단추

플래시 파일에 많은 양의 버튼과 클릭 리스너가 포함되어 있으므로 가능한 한 적은 코드로이 문제를 해결하고 싶습니다. 이 문제에 대한 가장 간단한 해결책은 무엇입니까?

답변

3

이벤트 리스너 및 처리기가 필요할 때 추가하고 필요없는 경우 제거해야합니다. 당신이 당신의 요구에 자신의 논리를 사용하지만, 여기에 예입니다됩니다있는 귀하의 모든 버튼이 될 것 같은 방식으로 작동 버튼의 많은 경우

button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler); 

function mouseDownEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.addEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Mouse Down"); 
} 

function mouseUpEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.removeEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Mouse Click (Mouse Up)"); 
} 

function rollOutEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.removeEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Roll Out"); 
} 

, 사용자 정의 버튼 클래스를 만들어야합니다 인스턴스.

+0

+1 최종 점입니다. – Marty

1

마우스가 아래쪽에있을 때 마우스 좌표를 기록하고 마우스를 위로 움직여 두 좌표를 비교하십시오. 거리가 10px (또는 원하는대로) 이상이면 클릭을 취소하십시오 (또는 클릭 리스너의 코드가 실행될 수 있도록 false로 설정).

또는

아래로 마우스

, 당신은 클립이 이동되었습니다 알 수 있도록 클립은 사용자가 클립을 다시 배치하는 경우에도 이동 된 경우, 다음 마우스까지에, 당신도 알다시피, 마우스 좌표를 기록 시작 정확히 같은 지점.

+0

사용자가 버튼 밖으로 드래그 한 다음 우연히 일치가 동일한 좌표로 다시 이동하면 어떻게됩니까? 귀하의 솔루션은 우아하게 간단하지만 더 나은 것이 필요합니다. – Abdulla

+0

@Abdulla, 내 대답을 편집했습니다. – Griffin