如何在变量名的末尾放置一个int,它为每个for / while循环更改。
我想生成大约40个不同的精灵变量,每个变量都有不同的数字。
有没有这样做的基本方法?
答案 0 :(得分:-1)
这可以满足您的要求:
// on Flash's main timeline
for(var i:int = 0; i < 40; i++){
this["sprite" + i] = new Sprite();
}
您最终会在sprite0
,sprite1
,sprite2
,... sprite39
的主时间轴上找到属性。 (请注意,此代码示例实际上并没有添加精灵,并且它没有为它们分配name
,因此getChildByName("sprite0")
不会起作用。)
但是,我应该说几件事情。
首先,分配这样的新属性仅适用于&#34;动态&#34;对象实例。 MovieClip
是动态的,这就是为什么将代码放在主时间轴上并使用this
应该有效(因为主时间轴是MovieClip
,除非您使用文档类另行指定)。通用Objects
和Arrays
也是动态的,因为它们是通用数据容器。但是,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'
希望有所帮助。