1

我真的很想知道。我制作了一个电影剪辑类 Apple,我编写了一个函数来创建一个名为“apple”的新实例。每次将新实例推入数组“apples”时。我调用该函数 5 次,得到 5 个苹果。我可以通过调用它们来操纵它们,即苹果[0]。当我追踪我的数组时,我看到了 5 个 [object Apple] 东西。所以也许我不太了解 AS3 对象的结构,但每个对象不应该有一个名字吗?

当我设置 apple.name 并获得一个具有 5 个不同名称的数组时,我无法通过apple1.x = 10 之类的名称来操作对象。如果每个苹果都有自己的坐标,计算机如何知道哪个苹果在哪里?调用它们的唯一方法是:apples[0]-apples[4]?如果我创建一个对所有苹果都应该相同的代码,我应该如何将函数寻址到“this”?因为当我编写类代码时,我还没有任何名字......

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

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

4

2 回答 2

4

您无需名称即可访问和操作您的实例。

你可以这样做:

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;
}
于 2013-02-19T13:52:10.477 回答
3

一样的问题吧?:)

例如Apple extends Spriteand 继承 property 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() ;

但是,如果它们的行为方式都相同,那么这样做就没有意义了。这就是你将它们存储到数组中的原因。

希望你明白我的意思。

于 2013-02-19T13:40:39.523 回答