如何使用代码访问DisplayObject的所有子项? (我正在寻找类似movieclip.children
)如何以编程方式访问DisplayObject的所有子项?
我使用这两种情况:
1)要遍历和重新定位,所有的封闭的MovieClip的孩子。通过并删除所有的电影剪辑
也是孩子们的
或者
2)循环,这是一个Flash CS5项目。
如何使用代码访问DisplayObject的所有子项? (我正在寻找类似movieclip.children
)如何以编程方式访问DisplayObject的所有子项?
我使用这两种情况:
1)要遍历和重新定位,所有的封闭的MovieClip的孩子。通过并删除所有的电影剪辑
也是孩子们的
或者
2)循环,这是一个Flash CS5项目。
此循环将触摸movieclip foo内的每个孩子。我不确定你会对他们做什么,但是你可以在循环中运行你需要的任何方法。
for (var i:uint=0; i<foo.numChildren;i++){
foo.getChildAt(i).whateverMethodYouNeed();
}
您的对象只是一个显示对象吗?如果它是一个UIComponent,你可以使用getChildAt()和getChildByName()以及numChildren属性来遍历它们。这是Flex项目的一部分还是仅限于ActionScript的项目?
DisplayObject本身没有描述子元素的机制。知道儿童的最低级别类型是DisplayObjectContainer。您可能必须将对象转换为至少一个DisplayObjectContainer才能够执行您想要的操作。如果你有Flex框架可以使用,我会用UIComponent。
如果您需要访问所有的孩子,包括孩子的孩子,你可以尝试 这样的:
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;
}
注有没有像'children [n]'这样的数组类型的存取器。你总是使用'get'方法一个接一个地访问孩子。 – fenomas 2010-11-16 00:17:38
不好的答案有两个原因:循环比较慢,然后var i:int = numChildren; while(i--> 0)getChildAt(i),DisplayObject没有方法“whateverMethodYouNeed” – 2012-01-04 13:14:11