Actionscript 3 如何调用在循环中创建的对象?

Actionscript 3 如何调用在循环中创建的对象?,actionscript-3,object,for-loop,Actionscript 3,Object,For Loop,新手问题: 如果在循环中创建多个形状对象,如: var i:int; for (i = 0; i < 3; i++) { var circle:Shape = new Shape(); circle.graphics.beginFill(color); circle.graphics.drawCircle(100,100, radius); circle.graphics.endFill(); addChild(circle); } var

新手问题:

如果在循环中创建多个形状对象,如:

var i:int; 
for (i = 0; i < 3; i++) {
    var circle:Shape = new Shape();
    circle.graphics.beginFill(color);
    circle.graphics.drawCircle(100,100, radius);
    circle.graphics.endFill();
    addChild(circle);   
}
vari:int;
对于(i=0;i<3;i++){
变量圆:形状=新形状();
圆形。图形。填充(颜色);
圆。图形。绘图圆(100100,半径);
circle.graphics.endFill();
addChild(圆圈);
}

然后我如何分别调用这些不同的形状,以便操纵它们的属性?在我看来,他们似乎都有相同的名字?

你可以通过他们的索引(他们被放在舞台上的顺序)访问他们。 比如:

DisplayObject(getChildAt(1)).x = 100; // Where the 1 is the index (starting at 0)

你可以通过他们的索引(他们被放在舞台上的顺序)访问他们。 比如:

DisplayObject(getChildAt(1)).x = 100; // Where the 1 is the index (starting at 0)

实际上,您可以只拥有一个对象数组(或向量),这样就不会依赖于当前的显示列表

var i:int; 
var circleArray:Array = new Array();
for (i = 0; i < 3; i++) {
    var circle:Shape = new Shape();
    circleArrayList.push(circle);
    circle.graphics.beginFill(color);
    circle.graphics.drawCircle(100,100, radius);
    circle.graphics.endFill();
    addChild(circle);   
}
//And then access them with
for(i = 0; i < circleArray.length, i++)
{
    circleArrayList[i].x = 15 * i;
}
//Or
foreach(var circle:DisplayObject in circleArray)
{
    circle.x = 15 * i;
}
vari:int;
var circleArray:Array=新数组();
对于(i=0;i<3;i++){
变量圆:形状=新形状();
circleArrayList.push(圆圈);
圆形。图形。填充(颜色);
圆。图形。绘图圆(100100,半径);
circle.graphics.endFill();
addChild(圆圈);
}
//然后使用
对于(i=0;i
实际上,您可以只拥有一个对象数组(或向量),因此不依赖于当前的显示列表

var i:int; 
var circleArray:Array = new Array();
for (i = 0; i < 3; i++) {
    var circle:Shape = new Shape();
    circleArrayList.push(circle);
    circle.graphics.beginFill(color);
    circle.graphics.drawCircle(100,100, radius);
    circle.graphics.endFill();
    addChild(circle);   
}
//And then access them with
for(i = 0; i < circleArray.length, i++)
{
    circleArrayList[i].x = 15 * i;
}
//Or
foreach(var circle:DisplayObject in circleArray)
{
    circle.x = 15 * i;
}
vari:int;
var circleArray:Array=新数组();
对于(i=0;i<3;i++){
变量圆:形状=新形状();
circleArrayList.push(圆圈);
圆形。图形。填充(颜色);
圆。图形。绘图圆(100100,半径);
circle.graphics.endFill();
addChild(圆圈);
}
//然后使用
对于(i=0;i
for(int i=0;i
for(int i=0;i)可以保留一个数组而不是单个变量。最佳做法是将对象放入
数组
向量
(如回答中所建议),并且不要在每次循环迭代中创建新的var。可能保留一个数组而不是单个变量。最佳做法是将对象放入
数组
向量
(如回答中所建议),并且不要在每次循环迭代中创建新的var。这是可能的,但这是一种不好的做法。不可能,但这是一个好的解决方案。你有一个好的解决方案吗?是的,但它已经在另一个答案中发布了。使用
数组
向量
。这是可能的,但这是一种不好的做法。不可能,但这是一个好的做法解决方案。你有一个好的解决方案吗?是的,但它已经在另一个答案中发布了。使用
数组
向量
。是的,你肯定不想使用
数组列表
。在最坏的情况下,使用
数组
,因为ArrayList是一个灵活的组件,它会增加大量开销,因为它只不过是一个数组的包装器。这与人们一贯使用
MovieClip
而不是
Sprite
是一样的。也就是说,在这种情况下,您根本不想使用数组,但是
向量
OMG拼写错误。纯AS3根本没有ArrayList:)这只是一种合乎逻辑的方法,问题的作者没有要求最快的方法。此外,在10之前的flash player版本中不支持向量(这并不重要,但谁知道呢?一些开发人员仍然为第9版本的玩家创建游戏,这几乎是他们的标准)但是向量更快,是的。是的,你肯定不想使用
ArrayList
。在最坏的情况下,使用
ArrayList
,因为ArrayList是一个灵活的组件,它增加了大量开销,因为它只不过是数组的包装器。这与人们在
Sprite
上一贯使用
MovieClip
是一样的。这就是说,在本例中,您根本不想使用数组,但是
Vector
OMG拼写错误。pure AS3根本没有ArrayList:)这只是一种逻辑方法,问题的作者没有要求使用最快的方法。此外,10之前的flash播放器版本中不支持矢量(这并不重要,但谁知道呢?一些开发人员仍然为第9版本的播放器创建游戏,这几乎是他们的标准),但矢量更快,是的。