如何使用代码访问DisplayObject的所有子项? (我正在寻找像movieclip.children
)
我在两种情况下使用它:
1)循环并重新定位封闭的MovieClip的所有子项。
或者
2)循环并删除MovieClip的所有子项
此外,这是一个Flash CS5项目。
答案 0 :(得分:6)
这个循环将触及movieclip foo中的每个孩子。我不确定你要对他们做什么,但你可以在循环中运行你需要的任何方法。
for (var i:uint=0; i<foo.numChildren;i++){
foo.getChildAt(i).whateverMethodYouNeed();
}
答案 1 :(得分:0)
你的对象只是一个显示对象吗?如果它是一个UIComponent,你可以使用getChildAt()和getChildByName()以及numChildren属性来循环它们。这是flex项目的一部分还是仅动作脚本项目?
DisplayObject本身没有描述其子对象的机制。知道子节点的最低级别类型是DisplayObjectContainer。您可能必须将对象转换为至少一个DisplayObjectContainer才能执行您想要的操作。如果你有灵活的框架可以使用,我会选择UIComponent。
答案 2 :(得分: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;
}