[英]AS3 Dynamically adding buttons to stage and accessing in different function
我试图将同一按钮的多个不同版本添加到舞台上,以便以后可以通过为其分配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类:
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。
因为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);
}
我认为问题在于namez上的ID是静态的。 因此,您不是将Id值分配给特定实例,而是分配给namez-class。
将变量设为公共财产
public var Id:int;
除此之外,在EventListener函数checkMe中,您再次引用类namez,而不是实例。 将该函数更改为:
public function checkMe(e:MouseEvent)
{
trace('clicked: ' + e.target.Id);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.