如何在AS3中生成变量名?

时间:2015-02-07 21:27:30

标签: actionscript-3

如何在变量名的末尾放置一个int,它为每个for / while循环更改。

我想生成大约40个不同的精灵变量,每个变量都有不同的数字。

有没有这样做的基本方法?

1 个答案:

答案 0 :(得分:-1)

这可以满足您的要求:

// on Flash's main timeline
for(var i:int = 0; i < 40; i++){
    this["sprite" + i] = new Sprite();
}

您最终会在sprite0sprite1sprite2,... sprite39的主时间轴上找到属性。 (请注意,此代码示例实际上并没有添加精灵,并且它没有为它们分配name,因此getChildByName("sprite0")不会起作用。)

但是,我应该说几件事情。

首先,分配这样的新属性仅适用于&#34;动态&#34;对象实例。 MovieClip是动态的,这就是为什么将代码放在主时间轴上并使用this应该有效(因为主时间轴是MovieClip,除非您使用文档类另行指定)。通用ObjectsArrays也是动态的,因为它们是通用数据容器。但是,AS3中几乎没有任何其他东西是动态的,包括其他显示对象类和您创建的任何类unless you explicitly declare it as dynamic。例如,如果您尝试将属性分配给Sprite,则会出现运行时错误:

var s:Sprite = new Sprite();
s["hello"] = "goodbye";

抛出:

  

ReferenceError:错误#1056:无法在flash.display.Sprite上创建属性hello。

如果你试图访问&#34;你好&#34;作为使用点语法的属性,它甚至不会编译:

var s:Sprite = new Sprite();
s.hello = "goodbye";

无法编译:

  

1119:通过静态类型flash.display:Sprite的引用访问可能未定义的属性hello。

这种类的默认非动态(又称&#34;密封&#34;)行为应该是一个指示器,通常比将新属性分配给显示对象(以及其他随机内容)更好的方式在运行时。 MovieClips可能只是动态地适应Flash建立的旧模式(这是我的猜测)。

所以你能做的就是使用Array

var sprites:Array = [];
for(var i:int = 0; i < 40; i++){
    sprites.push(new Sprite());
}

这段代码会给你一个名为sprites的数组,它有40个索引,每个索引引用不同的精灵。 (同样,这段代码并没有对Sprites做任何有用的事情。)你可以通过索引获得对精灵的引用,如下所示:

var sprite:Sprite = sprites[0];
// do whatever you want with 'sprite'

希望有所帮助。