3

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

我在两种情况下使用它:

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

或者

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

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

4

3 回答 3

6

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

for (var i:uint=0; i<foo.numChildren;i++){
    foo.getChildAt(i).whateverMethodYouNeed();
}
于 2010-11-16T00:12:03.300 回答
0

你的对象只是一个显示对象吗?如果它是一个 UIComponent,您可以使用 getChildAt() 和 getChildByName() 以及 numChildren 属性来循环它们。这是 flex 项目的一部分还是只有 actionscript 的项目?

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

显示对象

显示对象容器

界面组件

于 2010-11-16T00:16:05.883 回答
0

如果您需要访问所有孩子,包括孩子的孩子,您可以试试这个:

    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;
    }
于 2010-11-16T01:52:40.737 回答