如何在不为每个对象写一行的情况下访问 AS3 中的更多对象?

How do I access more objects in AS3 without writing a line for each of them?

假设我在 Flash 中有 5 个对象,我想更改它们的一些属性;它们的名称是 thing1、thing2 等等。当我有 3 或 4 个 MovieClip 时,这很容易,因为我只需为每个 MovieClip 写一行,但有时会涉及几百个对象。

thing1.alpha = 0.5;
thing2.alpha = 0.5;
thing3.alpha = 0.5;
thing4.alpha = 0.5;

而不是这个,我想要这样的东西:

var nr: int;
for (nr = 1; nr <= 4; nr++){
    MovieClip(String("thing" + String(nr))).alpha = 0.5;
}

我知道那行不通,但有什么办法可以用有用的东西代替 "String" 吗?

(我不想添加 Childs)

数组s 和循环就是答案。

您可以先列出所有对象,然后通过数组访问它们:

var aList:Array = [thing1, thing2, thing3, thing4];
var aThing:DisplayObject;

for each (aThing in aList)
{
    aThing.alpha = 0.5;
}

如果您知道如何构造它们的名称,您就可以访问容器中的对象:

for (var i:int = 1; i <= 4; i++)
{
    var aName:String = "thing" + i;
    var aThing:DisplayObject = getChildByName(aName);

    aThing.alpha = 0.5;
}

UDP: 通常我不鼓励这样做,因为某些影响(而且我仍然认为坚持提前列出或使用 getChildByName(。 ..) 是按顺序排列的更可靠的方法),但是,无论如何。您还可以通过方括号表示法处理嵌套对象,但这仅适用于:

  • 最初设计的对象 File > Publish Settings > AS3 Settings > Auto-declare Stage Instances 设置为 ON(它是 ON 默认情况下,但无论如何知道这一点是很好的);
  • 在 运行 时间内添加的对象,您明确指定为给定容器的成员,其名称与对象自身的实例名称相同。

此外,我真的建议您阅读我的 ,它详细突出了地址主题。

for (var i:int = 1; i <= 4; i++)
{
    var aName:String = "thing" + i;
    var aThing:MovieClip = this[aName];

    aThing.alpha = 0.5;
}