Actionscript 3 AS3-在向量内实例化类

Actionscript 3 AS3-在向量内实例化类,actionscript-3,class,vector,Actionscript 3,Class,Vector,我试图弄清楚向量是如何与类一起工作的。 好吧,我的房子里有这个: private var rockets:Vector.<Rocket> = new Vector.<Rocket>(); private var rocket:Rocket; 按空格键时,将在随机x处创建火箭,实例化rocket类并将其保存到var火箭。addChild将显示该图像。好的,当你再次按空格键时,据我所知,它会重新执行,但会用当前的数据替换var火箭中的数据,其中有一个新的随机x。 这行将所有

我试图弄清楚向量是如何与类一起工作的。 好吧,我的房子里有这个:

private var rockets:Vector.<Rocket> = new Vector.<Rocket>();
private var rocket:Rocket;
按空格键时,将在随机x处创建火箭,实例化rocket类并将其保存到var火箭。addChild将显示该图像。好的,当你再次按空格键时,据我所知,它会重新执行,但会用当前的数据替换var火箭中的数据,其中有一个新的随机x。 这行将所有火箭保存到类向量:

rockets.push(rocket);
下面是我在测试中发现的:我创建了多个有空间的火箭,然后按x键向我显示x的位置

if (_pressingX)
        {
            trace(rockets[0].x);
            trace(rockets[1].x);
            trace(rockets[2].x);
            trace(rockets);
            trace(rocket);
        }
我得到了所有的随机x,包括向量内的所有火箭。好吧,这是我没有得到的:如果每次我按下空格键,我都用当前的数据替换var火箭的数据,为什么我仍然可以通过火箭访问它?它不应该和它一起消失吗?它到底做了什么,我需要知道我的进一步工作。顺便说一句,我什么时候做

trace(rocket.x);
我所能看到的只是我最近创造的火箭,而不是其他的火箭。

var是一个手指。它指向你。许多手指可以指向您,但每个变量恰好只有一个手指

一个数组是多个手指。它可以是任意数量的手指,包括0个手指。每个手指都可以指向任何东西,包括任何东西。也许阵列中有1000个手指指向你。也许一个手指指向你,另一个手指指向我

你奶奶是一个阵列。她用手指指着包括你在内的所有家庭成员

爷爷是一个变种人。他指的是最后一个出生的家庭成员,在这个例子中恰好是你

你组成巴比

爷爷现在用手指着小用户2081462。他不再指着你了

问题:还有人在指责你吗? 回答:是的,奶奶


换句话说:删除手机上某个人的照片并不意味着删除其他手机上该人的所有其他照片,甚至该人本身。

这实际上与矢量无关。替换引用不会替换对同一对象的所有引用-引用可以是向量、数组、对象映射或任何其他变量。例如:

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
无法自动删除对对象的所有引用。你得自己做。从使用的向量中删除元素。例如,要从矢量中删除现有火箭,请执行以下操作:

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

每次使用新火箭时,您都会在RAM中为该对象创建额外的空间,以及它自己的地址等。而不是将变量放入数组/向量中,而是将其一般信息放入RAM中可以找到该对象的地址。如果你不把这些创造出来的火箭放进一个阵列,它们会在一段时间后被垃圾收集,因为它们不再被使用了;我试过tracerocket[1];而且它也不起作用?另外,这些信息看起来是什么样的,比如:坐标、要区分的随机名称等等?因为您正在重写变量。private var rocket只是一个占位符,它告诉编译器当您创建此类的对象时,在RAM中留出足够的空间来保存该对象的信息。对象的信息是其中的变量和函数。因此,一个只有变量public var index:int的类将在RAM中保留4个字节,因为在AS3中整数是4个字节。向量/数组是一种类似的东西,但它可以指向多个对象,而不是仅指向一个对象。您不能使用rocket[1],因为您的rocket类不是数组或向量,或者换句话说,它不是对象列表,而是单个对象。
var indexOfRocket:int = rockets.indexOf(rocket);
if(indexOfRocket > -1){
    rockets.splice(indexOfRocket, 1); // remove 1 element from index of rocket
}