使用动作脚本在运行时创建不同的按钮
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];
我需要在 运行 时间内创建一些按钮,每个按钮都有自己的行为,如样式和功能 我应该使用什么功能为按钮提供实例名称? 当我跟踪它随机生成的名称目标时,如 instance2 、 instance6 等等 谢谢
这是我尝试创建一个名为 glosbtn
的 classimport 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
.
相反,您通常使用数组或字典来跟踪显示对象。例如,你可以使用一个二维数组来表示你的按钮网格,并使用一个字典来存储一些与之相关的自定义数据:
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];