AS3类实例名称

问题描述:

我真的好奇。我制作了一个MovieClip类Apple,我编写了一个函数,用名称“apple”创建一个新实例。每次将新实例推入Array“Apple”时。我调用函数5次,我得到5个苹果。我可以通过调用它们来处理它们,例如苹果[0]。当我追踪我的数组时,我会看到5 [对象Apple]的东西。所以也许我不太了解AS3对象的结构,但是不应该每个对象都有一个名字吗?AS3类实例名称

当我设置apple.name并用5个不同的名称获得的阵列,我无法通过像apple1.x = 10名称操纵对象。 计算机如何知道哪个苹果在哪里,如果每个都有自己的坐标?是唯一称呼他们的方式:苹果[0] - 苹果[4]?如果我为所有苹果创建一个应该相同的代码,那么我应该如何解决该功能,以“this”?原因当我写班代码我还没有任何名字......

例如,如果我想让苹果类可以拖动图片(MovieClip),创建任意数量的苹果,最多一百万,我不可能将苹果[0] .addEventListener,苹果[1] .addEventListener ...苹果[1000000] .addEventListener添加到代码中。 如何使其成为全球?

我问的原因,当我直接编码一个特定的实例,它有一个名称,我确切地知道我在处理什么。和一个班级一起工作,制作很多东西我有点不...对不起,我很绿色

您不需要名称就能够访问和操作您的实例。

你可以做这样的事情:

var apples:Array = new Array(); 

for (var i:int = 0; i < 100; i++) 
{ 
    var apple:Apple = new Apple(); 
    apples.push(apple); 
    apple.x = Math.random() * 500; 
    apple.y = Math.random() * 500; 
    addChild(apple); 
    apple.addEventListener(MouseEvent.CLICK, onAppleClick); 

} 

function onAppleClick(e:MouseEvent):void 
{ 
    var ind:int = apples.indexOf(e.currentTarget); 
    var apple:Apple = apples[ind]; 
    trace(ind); 
    apples[ind].visible = false; 
    //or 
    //apple.visible = false; 
} 
+1

我觉得这是一个很好的例子,让OP滚动。所有DisplayObject实例的“名称”属性@SherWood与编译前脚本中的变量名称不同。在您的示例中,将对象存储在数组中,AS3知道对象的位置并通过数组维护对它们的引用。说数组在地址0,每个对象是20字节,对象1在0,对象2然后在地址20,对象3在地址40(通常这种事情与C讨论,但理论仍然适用于AS3) 。这里显示了获取变种的方法。 – shaunhusain 2013-02-19 13:56:41

+2

还有一点要注意的是,如果你在类中编写了一个方法(比如说你在Apple类中编写了一个方法),那么“this”意味着当前的实例,所以不会在实例的“外部”编写一堆代码在它们上面,你可以将该代码封装到类定义中的方法中。 – shaunhusain 2013-02-19 13:58:07

+0

非常好,简单,谢谢一堆!我会尽力告诉你它是否有效。此外,这是一种从群中获得特定苹果的方法吗?如果我想单击其中的一个,而不是可见的应用marryMe函数,并更改ringPutOn = true,并将颜色更改为粉红色,并停止执行其他苹果所做的操作,这将会很特别,是不是很好? (什么是perv XD)它不会改变整个班级?或者你更愿意建立一个新的班级,代表一个妻子 - 苹果,并改变点击一个新的班级? – SherWood 2013-02-19 20:01:18

同样的问题,呵呵? :)

例如Apple extends Sprite并继承财产name

这是公开的,这意味着你可以改变它的名字。

var apple:Apple = new Apple() ; 
apple.name = "MegaApple" ; 

此外,如果您将苹果添加到舞台上,您可以通过名称获取他。

stage.addChild(apple) ; 

获得苹果回来:

var oldApple:Apple = stage.getChildByName("MegaApple") ; 

但是,这绝不意味着,你可以使用苹果这样的: MegaApple.move() - 因为苹果的名称应该是苹果的一个属性,而不是一个名字的变量。

当然,你也可以手动创建许多苹果:

var apple1 = new Apple() ; 
var apple2 = new Apple() ; 
var apple3 = new Apple() ; 

但是,如果他们所有的行为方式相同,有做没有意义的。这就是为什么你将它们存储到数组中。

希望你明白我的意思。

+0

呵呵,不好意思,你走了,我仍然有问题^ _ ^” – SherWood 2013-02-19 19:54:47

+0

萘乙酸,它的优良:) – vikingmaster 2013-02-19 19:55:22