Actionscript 3 如何以编程方式访问DisplayObject的所有子对象?

Actionscript 3 如何以编程方式访问DisplayObject的所有子对象?,actionscript-3,actionscript,flash-cs5,displayobject,Actionscript 3,Actionscript,Flash Cs5,Displayobject,如何使用代码访问DisplayObject的所有子对象?(我正在寻找类似于movieclip.children) 我在两种情况下使用这个: 1) 循环并重新定位封闭MovieClip的所有子项 或 2) 循环浏览并删除MovieClip的所有子项 此外,这是一个Flash CS5项目。这个循环将触及movieclip foo中的每个孩子。我不确定你要对它们做什么,但是你可以在循环中运行你需要的任何方法 for (var i:uint=0; i<foo.numChildren;i++){

如何使用代码访问DisplayObject的所有子对象?(我正在寻找类似于
movieclip.children

我在两种情况下使用这个:

1) 循环并重新定位封闭MovieClip的所有子项

2) 循环浏览并删除MovieClip的所有子项


此外,这是一个Flash CS5项目。

这个循环将触及movieclip foo中的每个孩子。我不确定你要对它们做什么,但是你可以在循环中运行你需要的任何方法

for (var i:uint=0; i<foo.numChildren;i++){
    foo.getChildAt(i).whateverMethodYouNeed();
}

for(var i:uint=0;i您的对象只是一个显示对象吗?如果它是一个UIComponent,您可以使用getChildAt()和getChildByName()以及numChildren属性对其进行循环。这是flex项目的一部分还是仅actionscript项目的一部分

DisplayObject本身没有描述其子对象的机制。了解子对象的最低级别类型是DisplayObjectContainer。您可能必须将该对象转换为至少一个DisplayObjectContainer才能执行您想要的操作。如果您有flex框架,我会使用UIComponenth


如果需要访问所有子项,包括子项的子项,可以尝试 这:

函数doWhatever(mc:DisplayOjectContainer):无效
{
如果(mc.numChildren>0)
for(变量i:int;i
请注意,没有像
children[n]
这样的数组样式的访问器。您总是使用
get
方法逐个访问子对象。错误的答案有两个原因:循环比var i:int=numChildren慢;而(i-->0)getChildAt(i),DisplayObject没有“whateverMethodYouNeed”方法
    function doWhatever( mc:DisplayOjectContainer ):void
    {
          if( mc.numChildren > 0 )
             for( var i:int ; i < mc.numChildren ; ++i )
             {
                 //if you need to reposition
                //set the points properties here
                var point:Point = new Point( _x , _y );
                setPosition ( mc.getChildAt(i ) , point );

                //if you need to remove all children
                //do it recursively
                //remove( mc , mc.getChildAt( i );
             }
    }

    function setPosition(mc:DisplayObject , point:Point ):void
    {
        mc.x = point.x ;
        mc.y = point.y;
    }

    function remove(container:DisplayObjectContainer , child:DisplayObject ):void
    {
         //this will remove all children before being removed
         if( child is DisplayObjectContainer )
         {
             var doc:DisplayObjectContainer = child as DisplayObjectContainer;
             doWhatever( doc );
         }

         container.removeChild( child );
         child = null;
    }