AS3类实例名称

时间:2013-02-19 13:21:21

标签: actionscript-3 class

我真的很好奇。我创建了一个MovieClip类Apple,我写了一个函数,创建一个名为“apple”的新实例。每次将新实例推送到数组“apples”时。我把这个功能称为5次,我得到5个苹果。我可以通过调用它们来操纵它们,即苹果[0]。当我追踪我的阵列时,我看到了5个[对象Apple]的东西。所以也许我真的不了解AS3对象的结构,但不应该每个对象都有一个名字?

当我设置apple.name并获得一个包含5个不同名称的数组时,我无法通过 apple1.x = 10 之类的名称来操作对象。 如果每个苹果都有自己的坐标,计算机如何知道哪个苹果?是唯一的方式来称呼它们:apples [0] -apples [4]?如果我为所有苹果创建一个相同的代码,我应该如何解决这个问题呢?因为当我编写类代码时我还没有任何名字......

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

当我直接编写特定实例的代码时,我问的原因是,它有一个名称,我确切地知道我在寻址什么。和一个班级一起工作并制作许多物品我有点不...对不起,我很绿。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

同样的问题,是吧? :)

例如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() ;

但如果他们的行为方式相同,那就没有意义了。这就是你将它们存储到阵列中的原因。

希望你理解我的意思。