3

starling-layer (게임 자체)를 사용하는 게임과 이와 유사한 Popups 및 Stuff가 포함 된 클래식 디스플레이 목록을 만듭니다.DisplayEvent 뷰를 Starling 뷰로 MouseEvent- 전파하기

나는 문제가있다. MouseEvents가 displayList 요소에 생성되면 항상 starling 레이어로 이동하여 TouchEvents 등을 생성하는데 이는 매우 짜증 스럽다.

나는 그것을 처리하기위한 몇 가지 일반적인 (그리고 사용하기 쉬운) 접근법이 궁금합니다.

interfaceElement.addEventListener(MouseEvent.MOUSE_MOVE, stopPropagationHandler); 
interfaceElement.addEventListener(MouseEvent.MOUSE_DOWN, stopPropagationHandler); 
interfaceElement.addEventListener(MouseEvent.MOUSE_UP, stopPropagationHandler); 

private function stopPropagationHandler(e:MouseEvent):void { 
    e.stopPropagation(); 
} 

그러나 이것은 나에게 매우 불쾌한 같습니다

하나의 가능성은 다음 이벤트에 대한 모든 DisplayList가-요소를 청취했다. 그리고 그런 식으로해도 문제가 하나 더 있습니다. starling-element가 display-list-element 아래에 있고 롤오버 비헤이비어 >>에 대한 TouchEvent.TOUCH가있는 경우 롤오버 모양이 display-list-element 위로 마우스를 가져 가면 starling에서 제거 될 수 있습니다.

나는 모든 display-list-element 뒤에 dummy starling 요소를 두는 것에 대해서 생각했다. 이벤트를 멈추기 위해 생각했다. 그러나 그러한 모든 "단순한"작업에 대해서는 "지나치게 복잡하다". 또는 뭔가 빠졌습니까?

힌트를 많이 주시면 감사하겠습니다. 감사합니다. .

+0

모달 팝업이 재생되면 설정되는 이벤트 전파 블록 대신 전역 적으로 사용할 수있는 플래그를 사용한다고 말하고 싶습니다. starling 수준의 각 이벤트 핸들러는 설정되어 있는지 먼저 확인한 다음 반환하면 SWF의 Starling 부분이 팝업되는 동안 아무런 반응이없는 것처럼 동작합니다. – Vesper

+0

@Vesper thanks ..하지만 이미 언급했듯이 이것은 모달에만 적용됩니다. :/ 예를 들어, 언제나 볼 수있는 채팅. – Roman

답변

1

displaylist (스테이지가 아님)에 1 개의 메인 컨테이너를 만들고 ROLL_OVER 및 ROLL_OUT을 수신 대기하고 거기에 글로벌 플래그를 몇 개 설정하여 마우스가 디스플레이 목록 컨테이너 위에 있는지 확인할 수 있습니다. 그런 다음 별똥별 경기에서이 깃발을 확인하십시오. 이것은 가장 좋은 해결책이 아닌 것 같습니다.하지만 작동해야합니다.

+1

좋은 생각 .. 적어도 나는 나를 괴롭힌 MOUSE_MOVE-listener를 없애 버릴 것입니다. 그래서 나는 그들이 놓친 몇 가지 "집을 짓는"행동처럼 보이지 않습니다. – Roman

+0

나는 2 개의 ROLL_OVER 이벤트를 가지고있다. 이벤트를 수정하도록 변경했습니다. – Marijn

+0

이제 롤링 이벤트 >>를 통해 구현했지만, 변수를 설정하는 대신 모든 Starling-Views 상단에있는 Starling-Blocker의 가시성을 전환합니다. 감사! – Roman

관련 문제