我正在尝试将相同按钮的多个不同版本添加到舞台,并且稍后可以通过为其分配ID来访问它们。我假设这样做的方法是为按钮设置一个类,其中定义了一个内部静态变量,以便可以在下一个函数中找到该ID。这似乎不起作用,因为ID始终显示为给出的最后一个数字,因此在这种情况下为6。
我认为我这样做错了?这是我的代码,以便您更好地理解:
package src {
import flash.display.MovieClip;
import flash.events.*;
import flash.utils.Timer;
import flash.net.*
import flash.display.Loader
public class main extends MovieClip {
public var xmlData:XML = new XML
public var currentName = null
public function main() {
var y = 0
for(x=0; x<=6; x++){
var names:namez = new namez
namez.ID = y
y++
names.y = x*25
names.addEventListener(MouseEvent.CLICK, checkMe)
spinner.addChild(names)
}
}
public function checkMe(e:MouseEvent){
trace("clicked"+namez.ID)
}
}
}
namez.as class:
package src {
import flash.display.MovieClip
public class namez extends MovieClip{
internal static var ID
public function namez() {
}
}
}
尽管对namez.ID的按钮进行了跟踪,并且在单击按钮时正确显示0,1,2,3,4,5,6,但显示的唯一数字是6。
如何正确地进行其他功能可以访问的动态添加按钮?我应该在这里使用数组吗?
仅供参考,所需按钮总数为241。
答案 0 :(得分:2)
因为ID是一个静态变量,这意味着namez的所有实例只有一个ID,而听起来你想要为每个实例提供一个ID。只需删除'static'属性并按如下方式定义ID:
internal var ID
Pbirkoff很好地了解了您如何访问.ID属性,但您可能还希望将事件目标强制转换为namez类以访问更多自定义属性。
我还注意到你遗漏了一些分号和类型定义,这些定义可能需要也可能不需要,但它们是很好的编程实践:
public function main():void {
var y:int = 0
for (x:int = 0; x<=6; x++) {
var names:namez = new namez();
namez.ID = y;
y++;
names.y = x*25;
names.addEventListener(MouseEvent.CLICK, checkMe);
spinner.addChild(names);
}
}
private function checkMe(e:MouseEvent):void {
var names:namez = e.target as namez;
trace("clicked" + names.ID);
}
答案 1 :(得分:1)
我认为问题在于namez上的ID是静态的。因此,您不是将Id值分配给特定实例,而是分配给namez-class。
使变量成为公共属性
public var Id:int;
除此之外,在EventListener函数checkMe中,您再次引用类namez,而不是实例。将功能更改为:
public function checkMe(e:MouseEvent)
{
trace('clicked: ' + e.target.Id);
}