Запустите следующий код, один раз с block.mouseEnabled = true и еще раз с block.mouseEnabled = false, щелкая блок один раз во время каждого запуска.
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 );}
Почему «root» пропущен в качестве цели? Это по дизайну? Что является или что может быть конструктивной причиной этой аномалии?
Я спрашиваю об этом, потому что это явное отклонение от обычного шаблона, когда, когда для дочернего объекта mouseEnabled установлено значение false, родительский объект становится целью при нажатии на его дочернюю область.
Может случиться так, что корень является просто конечной точкой, не участвующей в захвате/цели/пузырьковом круговороте события, и все, что достигает его, применяется к этапу вместо корня.
DisplayObject
, поэтому он не может получать события мыши. Чтобы создать повторно используемый и поддерживаемый код, вы в любом случае не должны обращаться к корню или полагаться на него. Просто сделайте фоновый спрайт достаточно большим, чтобы покрыть соответствующую область. - person laurent   schedule 06.04.2012