我真的很好奇。我创建了一个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 代码。 如何使其全球化?
当我直接编写特定实例的代码时,我问的原因是,它有一个名称,我确切地知道我在寻址什么。和一个班级一起工作并制作许多物品我有点不...对不起,我很绿。
答案 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() ;
但如果他们的行为方式相同,那就没有意义了。这就是你将它们存储到阵列中的原因。
希望你理解我的意思。