2012-01-02 5 views
4

새해 복 많이 받으세요!mouseChildren = false 잘 작동하지 않습니다.

이벤트 처리를 컨테이너와 자식에서 분리하려고합니다. 당신이 볼 수 있도록, 내 소스 코드는 매우 간단하다 :

package { 
    import flash.display.Sprite; 
    import flash.display.*; 
    import flash.events.*; 

    public class test extends Sprite{ 

     public function test() { 
      var container:Sprite = new Sprite(); // my container 
      container.graphics.beginFill(0, 1); // whatever the color 
      container.graphics.drawRect(0, 0, 100, 100); // origin at 0,0 
      container.graphics.endFill(); 
      addChild(container); 

      var decor:Sprite = new Sprite(); // and it child 
      decor.graphics.beginFill(0, 1); // whatever the color 
      decor.graphics.drawRect(200, 200, 100, 100); // origin at 200,200 
      decor.graphics.endFill(); 
      container.addChild(decor); 
      container.mouseChildren = false; 
      container.addEventListener(MouseEvent.ROLL_OVER, onOver, false, 0, true); 
     } 
     private function onOver(e: MouseEvent):void { 
      trace("ROLL trace"); 
     } 
    } 
} 

내가 컨테이너 개체 위에 마우스를 때, 나는 추적을 가지고 (OK 나를 위해). 그러나 데코레이션 오브젝트를 굴릴 때 나는 원하는 것을 얻지 못했습니다. 단지 컨테이너가 자식 이벤트가 아닌 마우스 이벤트에 의해 트리거되기를 원할뿐입니다. 그래서 내 mouseChildren = false ....에 무슨 일이 일어 났습니까? 나는 이해하지 못한다 ...

답변

4

decor 개체는 container의 구성원이므로 container 내의 다른 내용과 함께 평가됩니다.

mouseChildren = false;은 마우스 이벤트를 완전히 비활성화하는 방법이 아니지만 복합 표시 객체 내에서 복잡성을 줄이는 방법입니다. 마우스 이벤트가 여전히 발생하지만 이벤트의 target 속성에는 마우스가 실제로 넘겨 준 하위 객체에 대한 참조가 포함되지 않습니다 속성이 설정된 상위 항목에만 적용됩니다.

decor을 완전히 무시하려면 대신 decor.mouseEnabled = false;을 사용하십시오.

+0

+1 오른쪽에 있습니다. 언어 참조 http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#mouseChildren에서 @nouatzi에 대한 몇 가지 무료 정보. 항상 AS3 문서를 확인하십시오! 그들은 훌륭한 nfo로 가득 차 있습니다. –

1

mouseEnabled = false를 시도했으며 작동하지 않습니다. 다른 포럼에서 사람들이 저에게 'a filled object within container will trigger the event handler'이라고 말했습니다. 그래서 그의 해결책은 컨테이너를 가지고 마우스 이벤트를 처리하는 자식 하나와 장식으로 다른 자식을 만드는 것입니다.

그리고 꽤 잘 작동합니다.