DisplayObjectContainer 类包括通过显示对象容器的子级列表遍历显示列表的属性和方法。例如,考虑下面的代码,其中在 container 对象(该对象为 Sprite,Sprite 类用于扩展 DisplayObjectContainer 类)中添加了两个显示对象 title 和 pict:
var container:Sprite = new Sprite();
var title:TextField = new TextField();
title.text = "Hello";
var pict:Loader = new Loader();
var url:URLRequest = new URLRequest("banana.jpg");
pict.load(url);
pict.name = "banana loader";
container.addChild(title);
container.addChild(pict);
getChildAt() 方法返回显示列表中特定索引位置的子级:
trace(container.getChildAt(0) is TextField); // true
您也可以按名称访问子对象。每个显示对象都有一个名称属性;如果没有指定该属性,Flash Player 或 AIR 会指定一个默认值,如 "instance1"。例如,下面的代码说明了如何使用 getChildByName() 方法来访问名为 "banana loader" 的子显示对象:
trace(container.getChildByName("banana loader") is Loader); // true
与使用 getChildAt() 方法相比,使用 getChildByName() 方法会导致性能降低。
由于显示对象容器可以包含其它显示对象容器作为其显示列表中的子对象,因此您可将应用程序的完整显示列表作为树来遍历。例如,在前面说明的代码摘录中,完成 pict Loader 对象的加载操作后,pict 对象将加载一个子显示对象,即位图。要访问此位图显示对象,可以编写 pict.getChildAt(0)。还可以编写 container.getChildAt(0).getChildAt(0)(由于 container.getChildAt(0) == pict)。
下面的函数提供了显示对象容器中显示列表的缩进式 trace() 输出:
function traceDisplayList(container:DisplayObjectContainer,indentString:String = ""):void
{
var child:DisplayObject;
for (var i:uint=0; i < container.numChildren; i++)
{
child = container.getChildAt(i);
trace(indentString, child, child.name);
if (container.getChildAt(i) is DisplayObjectContainer)
{
traceDisplayList(DisplayObjectContainer(child), indentString + " ")
}
}
}
----------------------------------------------------
其它参考方法
for (var every in _root) {
if (!i) {
i = 0;
}
if (typeof (_root[every]) == "movieclip") {
_root[every]._name = "mc"+i;
trace(_root["mc"+i]);
i++;
}
}