2012-01-02 61 views
4

新年快乐btw!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/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#mouseChildren获取一些有关@nouatzi的免费信息。总是检查AS3文档!他们充满了很棒的nfo。 – 2012-01-03 01:46:20

相关问题