AS3 - 在Vectors

时间:2015-09-09 15:25:37

标签: actionscript-3 class vector

我想弄清楚Vectors如何与类一起工作。 好吧,我的房产中有这个:

private var rockets:Vector.<Rocket> = new Vector.<Rocket>();
private var rocket:Rocket;

Rocket类只是一个普通的MovieClip类,里面有嵌入的图像。

现在我有了这段代码:

if (_pressingSpace)
{
    rocket = new Rocket(); 
    rocket.x = Random; 
    addChild(rocket); 
    rockets.push(rocket);
}

当您按空格键时,会在随机x处创建火箭,实例化类Rocket并将其保存到var火箭。 addChild将显示图像。好吧,当你从我所理解的情况再次按空间时,它会再次重复,但用当前数据(具有新的随机x)替换var rocket内的数据。 好吧,这条线将每个火箭保存到Vector类:

rockets.push(rocket);

现在我在测试中找到的内容:我创建了多个带空格的火箭,然后按x向我展示了x&#39;

if (_pressingX)
        {
            trace(rockets[0].x);
            trace(rockets[1].x);
            trace(rockets[2].x);
            trace(rockets);
            trace(rocket);
        }

我确实得到了所有随机的x,包括所有在向量内的火箭。那么这就是我不能得到的:如果每次我按空间我用当前的数据替换var火箭的数据,为什么我仍然可以通过&#34;火箭&#34来访问它;?它不应该随之消失吗?究竟它做了什么,我需要知道我的进一步工作。顺便说一下

trace(rocket.x);

我所能看到的最近的火箭是我创造的,而不是其他火箭。

2 个答案:

答案 0 :(得分:0)

var是一根手指。它指向你。许多手指可能指向你,但每var只碰到一根手指。

Array是很多手指。它可以是任何数量的手指(包括0个手指)。每个手指都可以指向任何东西(包括任何东西)。也许数组是1000个手指指着你。也许一根手指指着你,另一根指着我。

你的奶奶是Array。她用个别的手指指向所有家庭成员(包括你)。

爷爷是var。他指出了最后一个出生的家庭成员,在这个例子中碰巧就是你。

你形成了babby。

爷爷现在指着user2081462 Jr.他不再指向你了。

问题:还有人指着你吗? 答:是的,奶奶。

换句话说:删除手机上某个人的照片并不意味着该手机上存在的所有其他照片或其他人本身的照片都会被删除。

答案 1 :(得分:0)

它实际上与矢量没有任何关系。替换引用不会替换对同一对象的所有引用 - 引用可以在向量,数组,对象映射或任何其他变量中。例如:

var a:Rocket = new Rocket();
var b:Rocket = a;
trace(a == b); // true; a and b refer to the same rocket
a = new Rocket();
trace(a == b); // false; a is a new rocket, b refers to the old rocket

无法自动删除对象的所有引用。你必须自己做。要从矢量中删除元素,请使用splice()。例如,要从向量中删除现有火箭:

var indexOfRocket:int = rockets.indexOf(rocket);
if(indexOfRocket > -1){
    rockets.splice(indexOfRocket, 1); // remove 1 element from index of rocket
}