2011-09-08 45 views
0

如何跟蹤「section1.btnback」被點擊?AS3 - 獲取按鈕實例名稱和路徑

section1.btnback.addEventListener(MouseEvent.CLICK, getBack) 

    function getBack(event:MouseEvent):void 
    { 
    // trace: "section1.btnback" 
    } 

謝謝。 Uli

回答

1

我不確定你在問什麼。如果我的建議不適合你,請原諒。如果你寫

trace(event.target) 

你會看到按鈕實例的完整名稱。

0

我猜你想要這樣說: 「Button was clicked!」每次按下按鈕時進行控制檯控制?

trace(「Section1.btnback was clicked!」);

我相信。 (真的不知道你問的什麼)中的註釋

- 頻譜擴展如下─

+0

我正在尋找這樣的事情:** trace(event.currentTarget.name)** - 問題是這隻給了我「btnback」 - 但我需要完整的按鈕路徑。 – Uli

+0

試試這裏:http://www.actionscript.org/forums/showthread.php3?t=142581或這裏:http://stackoverflow.com/questions/4680323/help-me-to-find-out-the-對象路徑在閃光燈 – 3lionz

+0

你問顯示列表爲「完整的路徑」? – meddlingwithfire

0

如果你想在「完整路徑」像meddlingwithfire在他的評論中提出的3lionz的答案,那麼你可以使用一個我創建的類是爲你做的。該類稱爲DOPath(顯示對象路徑的縮寫)。

Main.as(文檔類)::

package 
{ 
    import com.example.display.DOPath; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

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

     }// end function 

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

      var container1:Sprite = new Sprite(); 
      container1.name = "container1"; 

      var container2:Sprite = new Sprite(); 
      container2.name = "container2"; 

      var square:Square = new Square(); 
      square.name = "square"; 
      square.addEventListener(MouseEvent.CLICK, onSquareClick); 

      addChild(container1); 
      container1.addChild(container2); 
      container2.addChild(square); 

     }// end function 

     private function onSquareClick(e:MouseEvent):void 
     { 
      var square:Square = e.target as Square; 

      var doPath:DOPath = new DOPath(square); 
      trace(doPath); // output: stage.root1.container1.container2.square 

     }// end function 

    }// end package 

}// end package 

import flash.display.Sprite; 

internal class Square extends Sprite 
{ 
    public function Square() 
    { 
     graphics.beginFill(0xFF0000); 
     graphics.drawRect(0, 0, 100, 100); 
     graphics.endFill(); 

    }// end function 

}// end class 

DOPath.as

package com.example.display 
{ 
    import flash.display.DisplayObject; 
    import flash.display.DisplayObjectContainer; 
    import flash.display.Stage; 

    public class DOPath 
    { 
     private var _parents:Vector.<DisplayObjectContainer>; 
     private var _d:DisplayObject; 

     public function DOPath(d:DisplayObject):void 
     { 
      _d = d; 

      init(); 

     }// end function 

     private function init():void 
     { 
      _parents = new Vector.<DisplayObjectContainer>; 

      pushParent(_d); 

     }// end function 

     private function pushParent(d:DisplayObject):void 
     { 
      if(d.parent) 
      { 
       _parents.push(d.parent); 
       pushParent(d.parent); 

      }// end if 

     }// end function 

     public function toString():String 
     { 
      var path:String = _d.name; 

      for (var i:uint = 0; i < _parents.length; i++) 
      { 
       var name:String = (_parents[i] is Stage) ? "stage" : _parents[i].name; 
       path = name + "." + path; 

      }// end for 

      return path; 

     }// end function 

    }// end class 

}// end package 
正在使用它的一個例子,以得到一個顯示對象的完整路徑以下
0

您可以使用這樣一個很簡單的遞歸函數:

private function getDOname(dob : DisplayObject) : String 
{ 
    var result : String = dob.name; 

    if (dob is UIComponent) 
    { 
     result = UIComponent(dob).id; 
    } 

    if(dob.parent && dob.parent is DisplayObjectContainer) 
    { 
     result = getDOname(dob.parent) + "." + result; 
    } 

    return result; 
} 

你可以通過event.target的功能和獲得被點擊的按鈕。如果您正在將這些技術用於調試目的,您可以簡單地將點擊事件添加到事件監聽器,或者將事件監聽器添加到舞臺或SandboxRoot本身,如果您不確定實際點擊的是哪個視覺元素。