2016-12-04 1 views
0

나는이 게임을 사용자가 직선으로 그리는 (닫히지 않은 모양을 만들기 위해) 플래시를 만들고 있는데, 두 번 클릭하여 선 그리기를 멈추고 싶습니다.두 번 클릭하여 사용자 그리기를 중지 하시겠습니까? As3

드로잉 보드은 무비 클립 (스테이지가 아님)입니다.

더블 클릭 이벤트 리스너를 보드에 넣었으며 doubleClickEnabled = true도 보드에 추가했습니다.

그러나 내가하는 일과 관계없이 보드는 내 두 번 클릭을 인식하지 못합니다.

답변

0

클릭 이벤트는 이벤트 위치에서 클릭 가능한 엔티티가있을 때 트리거됩니다. 즉, "드로잉 보드"의 "투명한"영역에서 "더블 클릭"하면 연결된 이벤트 핸들러가 호출되지 않습니다.

그러나 문제의 해결책으로 전체 디스플레이 영역을 차지하므로 stage 개체를 활용할 수 있습니다. 어쨌든 마우스 이벤트를 수신합니다. 이 아이디어는 stage의 이벤트 처리기가 드로어 보드의 상대에게 이벤트 발생에 대해 알리는 것입니다.

board.doubleClickEnabled = true; 
board.addEventListener(MouseEvent.DOUBLE_CLICK, onBoardDBLClick); 

stage.doubleClickEnabled = true; 
stage.addEventListener(MouseEvent.DOUBLE_CLICK, onStageDBLClick); 

function onStageDBLClick(e:MouseEvent):void { 
    trace("STAGE double clicked."); 

    // if the location is inside the "board", then inform the "board" about the event! 
    if (board.getBounds(stage).contains(e.stageX, e.stageY)) { 
     onBoardDBLClick(e); 
    } 
} 

function onBoardDBLClick(e:MouseEvent):void { 
    trace("The Double-click logic of the board."); 
    e.stopPropagation(); 
} 
+0

시도했는데 작동하지 않습니다. 더블 클릭 리스너를 무대에 추가했는데 보드 외부 스테이지를 두 번 클릭하면 작동하지만 보드 자체를 두 번 클릭하면 작동하지 않습니다. – Mich

+0

@ 나는 "드로잉"을 완성하기 위해 "보드"의 투명한 영역을 두 번 클릭하는 것에 만 관심이 있다고 생각했지만, 그렇지 않으면 발표 했으므로 재검토의 문제 일뿐입니다! 게시물에 대한 편집을 확인하십시오 :) – someOne

+0

글로벌 클릭 수 ** deltaTime ** 변수를 가진 간단한 클릭 핸들러가 어떤 클릭이 이중인지 판단 할 수있는 방법을 제안합니다. 두 번의 연속 클릭에 대해 맞춤 최대 지연을 선언하기 때문에 (창에 대해 500ms). mouseDown 및 mouseUp 이벤트를 사용하여 이벤트 리스너를 줄이고 기존 리스너 (작업 그리기에 존재)를 사용할 수도 있습니다. –