2012-03-14 58 views
0

有没有办法让我点击的movieClip的路径?AS3在mouseClick上查找MC路径?

例如event.currentTarget.path? (这不工作,但我想类似的东西!)

感谢

+0

你是什么意思路径:

stage.addEventListener(MouseEvent.MOUSE_DOWN , mouseHandler); public function mouseHandler(e:MouseEvent):void { var object:DisplayObject = e.target as DisplayObject; var path:String = object.name ; while(object != e.target.root){ object = object.parent; path = object.name + "." + path; trace(object); }; trace("stage."+path); }; 

要使用此功能路径IM得到的DisplayObject? – grapefrukt 2012-03-14 08:28:54

+0

你可以编写一个递归函数来检查event.CurrentTarget是否有父项并将其附加到列表/路径。不过,如果能方便地命名DisplayObject,否则它会有点棘手,除非你知道围绕项目@grapefrukt的方式,我认为他意味着从显示列表顶部到被点击的影片剪辑的路径 – 2012-03-14 08:33:53

+0

@GeorgeProfenza - 是的,我是指从显示列表的顶部。这可能吗?似乎应该很容易,但找不到方法 – user1203605 2012-03-14 08:51:42

回答

2

所以你想通过名称来获得路径:]

在这里你有工作版本,之前我写的唯一的想法。 link to github

+0

我喜欢通过名字获得路径吗?是的,你能提出一个更好的方法吗? (当然,你是示例作品。) – user1203605 2012-03-15 09:21:15

+0

我认为没有比这更好的方法。您只能循环访问父对象并获取其名称或深度。 – turbosqel 2012-03-15 09:28:28

1

如果路径你的意思是一个DisplayObject的路径的显示列表的字符串表示你可以使用递归构建路径字符串像下面这样:

package 
{ 
    import flash.display.DisplayObject; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class Main extends Sprite 
    { 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      var sprite1:Sprite = new Sprite(); 
      sprite1.name = "sprite1"; 
      var sprite2:Sprite = new Sprite(); 
      sprite2.name = "sprite2"; 
      var sprite3:Sprite = new Sprite(); 
      sprite3.name = "sprite3"; 

      stage.addChild(sprite1); 
      sprite1.addChild(sprite2); 
      sprite2.addChild(sprite3); 

      trace(getPath(sprite3)); 

     } 

     private function getPath(displayObject:DisplayObject):String 
     { 
      var path:String = ""; 

      var name:String = (displayObject != stage) 
       ? displayObject.name : "stage"; 

      path += name + "."; 

      if (displayObject.parent) 
      { 
       path = getPath(displayObject.parent) + path; 

      } 

      return path; 

     }// end function 

    }// end class 

}// end package