在AS3中,为什么鼠标事件似乎跳过“root”并进入“stage”?

时间:2012-03-14 04:33:25

标签: actionscript-3 mouseevent root stage displayobject

运行以下代码,一次使用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时,父项在单击子区域时成为目标。

可能是root只是事件capture / target / bubbling rount-trip中的非参与者端点,并且到达它的任何内容都会应用于stage而不是root。

1 个答案:

答案 0 :(得分:1)

图形上的任何笔画和矢量填充都不是交互式的,无法捕捉交互式事件。您可以使用graphics.beginBitmapFill方法或将Bitmap(或任何其他)添加为子项。