Actionscript 3 如何在actionscipt3中查找对象的完整路径

Actionscript 3 如何在actionscipt3中查找对象的完整路径,actionscript-3,actionscript,flash-cs5,Actionscript 3,Actionscript,Flash Cs5,如何找到movieclip或textfield的targetpath。?? 我需要获得movieclip的完整路径,比如对象(root).movieclip1.movieclip2.textfield,我确信没有任何一个属性或方法可以为您提供此功能。您可以在displaylist树中循环搜索目标。但是这可能是一个很大的循环,这取决于您有多少个图形,我相当肯定没有一个属性或方法可以为您提供这一点。您可以在displaylist树中循环搜索目标。但这可能是一个很大的循环,这取决于你有多少个图形,你的

如何找到movieclip或textfield的targetpath。??
我需要获得movieclip的完整路径,比如
对象(root).movieclip1.movieclip2.textfield

,我确信没有任何一个属性或方法可以为您提供此功能。您可以在displaylist树中循环搜索目标。但是这可能是一个很大的循环,这取决于您有多少个图形,我相当肯定没有一个属性或方法可以为您提供这一点。您可以在displaylist树中循环搜索目标。但这可能是一个很大的循环,这取决于你有多少个图形,你的意思是这样的吗

addEventListener(MouseEvent.CLICK, targetMC);
    function targetMC(ev:Event):void
    {
        var curinstance = ev.target.valueOf();//object
        var targ:Object = curinstance.parent;
        var path= curinstance;
        do
        {
            if (targ is Stage)
            {
                path = targ + "." + path;
            }
            else
            {
                path = targ + "." + path;
            }

            targ = targ.parent;
        }

    trace(path);

    }

你的意思是这样吗?

addEventListener(MouseEvent.CLICK, targetMC);
    function targetMC(ev:Event):void
    {
        var curinstance = ev.target.valueOf();//object
        var targ:Object = curinstance.parent;
        var path= curinstance;
        do
        {
            if (targ is Stage)
            {
                path = targ + "." + path;
            }
            else
            {
                path = targ + "." + path;
            }

            targ = targ.parent;
        }

    trace(path);

    }

这可能不是你想听到的,但似乎你正在尝试ActionScript2风格的做事方式

您可能希望进一步了解OOP(面向对象编程)。 它看起来非常陌生,而且好像它实际上对你不利,但当项目变得更大时,它会有很大帮助

movieclips的名称不再是父级的属性名称。我担心,如果你要做我认为你正在试图做的事情,让属性名遍历movieclip树,它将不起作用,你会看到类似这样的事情

stage.instance2.instance15.instance45.instance90


正如你所猜测的那样,这并没有多大帮助。

这可能不是你想听到的,但你似乎正在尝试Actionscript 2风格的做事方式

您可能希望进一步了解OOP(面向对象编程)。 它看起来非常陌生,而且好像它实际上对你不利,但当项目变得更大时,它会有很大帮助

movieclips的名称不再是父级的属性名称。我担心,如果你要做我认为你正在试图做的事情,让属性名遍历movieclip树,它将不起作用,你会看到类似这样的事情

stage.instance2.instance15.instance45.instance90


你可以猜到,这不会有多大帮助。

我想我理解你在寻找什么,我写了一个小函数来实现这一点。这很难看,但应该能奏效

function getChildFromPath(base:DisplayObjectContainer, path:String):DisplayObject
{
    var pathAsArr:Array = path.split(".");
    if (pathAsArr.length)
    {
        var newBase:DisplayObjectContainer = base.getChildByName(pathAsArr.shift() as String) as DisplayObjectContainer;
        if (newBase)
            return getChildFromPath(newBase, pathAsArr.join("."));
        else
            return null;
    }
    return base;
}
您为它指定要查看的路径的起始位置(此位置或阶段,取决于您正在为路径钻孔的终点),以及字符串中的路径

例如,假设我有一个名为“a”的mc,在“a”里面有一个名为“b”的mc,你不能用这个[“a.b”],而是用这个[“a”][“b”]。 使用此功能,您可以执行以下操作:

var path:String = "a.b";
var mc:DisplayObject = getChildFromPath(this, path);

我没有用太多类型的输入来检查它,所以我不确定它在某些情况下不会永远中断或循环。

我想我了解您在寻找什么,我编写了一个小函数来实现这一点。这很难看,但应该能奏效

function getChildFromPath(base:DisplayObjectContainer, path:String):DisplayObject
{
    var pathAsArr:Array = path.split(".");
    if (pathAsArr.length)
    {
        var newBase:DisplayObjectContainer = base.getChildByName(pathAsArr.shift() as String) as DisplayObjectContainer;
        if (newBase)
            return getChildFromPath(newBase, pathAsArr.join("."));
        else
            return null;
    }
    return base;
}
您为它指定要查看的路径的起始位置(此位置或阶段,取决于您正在为路径钻孔的终点),以及字符串中的路径

例如,假设我有一个名为“a”的mc,在“a”里面有一个名为“b”的mc,你不能用这个[“a.b”],而是用这个[“a”][“b”]。 使用此功能,您可以执行以下操作:

var path:String = "a.b";
var mc:DisplayObject = getChildFromPath(this, path);

我没有用太多类型的输入检查它,所以我不确定它在某些情况下不会永远中断或循环。

@Roy是的,我忘了。你得到路径了吗?你能给那个对象提供属性/方法吗?“addEventListener(MouseEvent.CLICK,targetMC);函数targetMC(ev:Event):void{var curinstance=ev.target.valueOf();//对象变量target:object=curinstance.parent;var path=curinstance;do{if(target是Stage){path=target+“+path;}else{path=target+”+path;}.target=target.parent;}while(target!=null)//此[path].x=100;trace(path);}此[“teg5”].appendText(“这是sting to obj”);@Roy是的,我忘了。你得到路径了吗?你能给那个对象提供属性/方法吗?“addEventListener”(MouseEvent.CLICK,targetMC);函数targetMC(ev:Event):void{var curinstance=ev.target.valueOf();//对象var target:object=curinstance.parent;var path=curinstance;do{if(target is Stage){path=targ+”“+path;}否则{path=targ+”“+path;}targ=targ.parent;}而(targ!=null);//这个[path].x=100;跟踪(path);}这个[“teg5”].appendText(“这是对obj的sting”);实际上,我正在处理键盘交互,因此有很多表单包含文本字段。当我单击或聚焦任何一个/每个文本字段键盘时,我都可以使用该键盘键入。但问题是,当我单击一个文本字段时,我想获取该文本字段的targetPath。即使我将焦点更改为另一个文本字段xtfield我也必须在该文本字段上键入。表单中有许多文本字段。以下是以字符串形式获取targetpath/显示对象路径的代码。我需要将此路径转换为对象,并为该对象提供属性。啊,我刚才做了类似的操作。我所做的是使用“扩展”扩展flash.text.textfieldmy.text.TextField"对于KeyboardStatic有一个静态单例类,在focus/click上,它将发送一个对KeyboardStatic的直接引用,这将激活键盘和键盘,并开始向其发送键..如果您不能/不希望创建扩展的TextField类,可能在KeyboardStatic上有一个公共静态函数d注册键盘并向其添加点击/聚焦事件,但这将涉及到进入代码/电影剪辑并执行KeyboardStatic.register(_tfTextField1);KeyboardStatic.register(_tfTextField2);实际上,我正在处理键盘交互,因此有很多表单包含文本字段。当我单击或聚焦任何一个/每个文本字段键盘时,我都可以使用该键盘键入。但问题是,当我单击一个文本字段时,我想获取该文本字段的targetPath。即使我将焦点更改为另一个文本字段xtfield i