2
block.mouseEnabled = true로 한 번 실행하고 block.mouseEnabled = false로 다시 실행하여 각 실행 중에 블록을 한 번 클릭하십시오.AS3에서 마우스 이벤트가 "루트"를 건너 뛰고 "스테이지"로가는 이유는 무엇입니까?
var block:Sprite = new Sprite();
block.name = "block";
with(block.graphics){beginFill(0x000000,1);moveTo(0,0);lineTo(100,0);lineTo(100,100);lineTo(0,100);lineTo(0,0);endFill();}
block.mouseEnabled = true; //change to false to see how event target skips root
addChild(block)
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse_down, false, 0, true);
function mouse_down(e:MouseEvent):void{trace(e.target);}
왜 "루트"가 대상으로 건너 뛰었습니까? 디자인에 의한 것인가? 이 변칙의 설계 이유는 무엇입니까?
정상적인 패턴과의 경계가 분명하기 때문에, 자식 개체가 mouseEnabled가 false로 설정된 경우 자식 영역을 클릭하면 부모가 대상이됩니다.
루트는 이벤트 캡처/대상/버블 링 깡패 여행에서 단순히 참여하지 않는 엔드 포인트이고 도달하는 모든 항목이 루트가 아닌 스테이지에 적용될 수 있습니다.
** 사회자 참고 ** * 순수 노이즈, 제로 신호에 녹아서이 문제의 설명이 제거되었습니다. 댓글이나 토론에서 논리적 인 토론이나 토론을 피하십시오. * –
정말 재미 있습니다. 루트에 마우스 이벤트를 수동으로 보내면 예상대로 스테이지에 거품이 생기지 만 루트에 첨부되거나 그려진 모양이나 그래픽과 마우스가 상호 작용하지 않으면 루트가 대상이됩니다. 대신 항상 스테이지로 기본 설정됩니다. 최소한 마우스가 상호 작용하는 것을 방해하지 않고 루트 배경이 아닌 무대 배경으로 효과적으로 작동 할 수 있다면 루트 전체를 그릴 수 있다는 것을 아는 것이 좋습니다. – Triynko
Martys 대답에 대한 내 의견보기. 루트 객체는 상대적입니다. 무대의 경우 stage.root == stage. 즉, 순환 참조입니다. 객체 대상은 이미 루트, 즉 스테이지로 설정되어 있으므로 "루트"로 설정되지 않습니다. –