使用动作脚本在运行时创建不同的按钮

create different buttons in the runtime using actionscript

我需要在 运行 时间内创建一些按钮,每个按钮都有自己的行为,如样式和功能 我应该使用什么功能为按钮提供实例名称? 当我跟踪它随机生成的名称目标时,如 instance2 、 instance6 等等 谢谢

这是我尝试创建一个名为 glosbtn

的 class
import flash.events.MouseEvent;
import flash.events.Event;

for(var i:int=0;i<4;i++)
{
    for(var j:int=0;j<6;j++)
{
var btn:glosbtn= new glosbtn();
addChild(btn);
btn.x=50*j;
btn.y=50*i;
btn.addEventListener(MouseEvent.CLICK,glosbtnclick)

}
}

function glosbtnclick(e:Event){
    trace(e.target.name)
    // do my stuff
}

正如 akmozo 在评论中所说,您可以在代码中分配一个 name

var btn:glosbtn = new glosbtn();
btn.name = "button" + i + "_" + j;

function glosbtnclick(e:MouseEvent):void {
    trace(e.currentTarget.name); // "button0_5", "button3_1", etc
}

也就是说,我想不出您真正想要这样做的很多原因。给显示对象 name 而不是 与在时间轴中给符号 "instance name" 是一样的。当您在时间轴中给符号一个 "instance name" 时,它还会在父时间轴上按该名称分配一个 属性,例如 mc.button1_2,并将实例分配给该 属性 ] 当时间轴关键帧放置它时,当关键帧删除它时使 属性 为空。当您分配显示对象 name.

时,其中 None 为真

相反,您通常使用数组或字典来跟踪显示对象。例如,你可以使用一个二维数组来表示你的按钮网格,并使用一个字典来存储一些与之相关的自定义数据:

var buttons:Array = [];
var buttonsData:Dictionary = new Dictionary();
for (var i:int = 0; i < 4; i++) {
    buttons[i] = [];
    for (var j:int = 0; j < 6; j++) {
        var btn:glosbtn = new glosbtn();
        addChild(btn);
        btn.x = 50 * j;
        btn.y = 50 * i;
        buttons[i][j] = btn;
        buttonsData[btn] = {i: i, j: j};
        btn.addEventListener(MouseEvent.CLICK, glosbtnclick);
    }
}

function glosbtnclick(e:MouseEvent):void {
    // to look up button data
    var data = buttonsData[e.currentTarget] // {i: 0, j: 5}, {i: 3, j: 1}, etc
}

// to look up a button
var btn:glosbtn = buttons[0][3];