如何跟蹤「section1.btnback」被點擊?AS3 - 獲取按鈕實例名稱和路徑
section1.btnback.addEventListener(MouseEvent.CLICK, getBack)
function getBack(event:MouseEvent):void
{
// trace: "section1.btnback"
}
謝謝。 Uli
如何跟蹤「section1.btnback」被點擊?AS3 - 獲取按鈕實例名稱和路徑
section1.btnback.addEventListener(MouseEvent.CLICK, getBack)
function getBack(event:MouseEvent):void
{
// trace: "section1.btnback"
}
謝謝。 Uli
我不確定你在問什麼。如果我的建議不適合你,請原諒。如果你寫
trace(event.target)
你會看到按鈕實例的完整名稱。
我猜你想要這樣說: 「Button was clicked!」每次按下按鈕時進行控制檯控制?
trace(「Section1.btnback was clicked!」);
我相信。 (真的不知道你問的什麼)中的註釋
- 頻譜擴展如下─
如果你想在「完整路徑」像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
正在使用它的一個例子,以得到一個顯示對象的完整路徑以下
您可以使用這樣一個很簡單的遞歸函數:
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本身,如果您不確定實際點擊的是哪個視覺元素。
我正在尋找這樣的事情:** trace(event.currentTarget.name)** - 問題是這隻給了我「btnback」 - 但我需要完整的按鈕路徑。 – Uli
試試這裏:http://www.actionscript.org/forums/showthread.php3?t=142581或這裏:http://stackoverflow.com/questions/4680323/help-me-to-find-out-the-對象路徑在閃光燈 – 3lionz
你問顯示列表爲「完整的路徑」? – meddlingwithfire