as3引用未明确定义的数组成员

时间:2009-08-05 20:54:26

标签: actionscript-3 arrays

我在数组中创建了一堆对象。我习惯于迭代地这样做,比如

for(i:int; i < number; i++){
  ball= new Ball;
  balls.push(ball);
  }

然后我可以参考球[i]。然而,现在我用鼠标点击创建对象,而不是for循环,所以我没有那个[i],所以我的其他代码只引用了“ball”,这意味着它只会影响到任何一个创建。是否有任何合理的方法可以任意“命名”每个对象,以后我可以说“你们每个人都去做自己的事情而忽视其他人”?

2 个答案:

答案 0 :(得分:0)

有几种解决方案,

如果你有球的参考,你可以使用

myArray.indexOf(myBall)

这会给你它在数组中的位置,所以你可以与它交谈。

您还可以使用如下名称值存储它们:

myArray["name" + uniqueIdentifier] = myBall;

这将取代你的推送声明。

或者你可以像这样循环遍历它们:

for(var i:int = 0; i < myArray.length; i++)
{
    ball = myArray[i];
    //perhaps you stored a value on ball to distinguish when it was created
    if(ball.wasCreatedByMouseClick) // do something
}

希望能给你一些想法。

答案 1 :(得分:0)

我不知道你的代码是做什么的,但根据你所描述的,我会使用字典用字符串键存储你的对象。

字典类表现为一个对象,您可以在其中设置动态属性(键)及其值(您的对象)。 它与对象不同,因为键可以是任何东西(字符串,对象,数组,......任何东西)。

这是一个例子:

var d:Dictionary = new Dictionary (true);
d["myBall"] = new Ball();

function getBallByKey(key:String):Ball
{
return d[key];
}

取决于场景,好的方法是将字典引用设置为弱。这是为了避免内存泄漏(实际上让对象“死”没有其他引用,但字典本身指向该对象)