动态变量名称 - Actionscript 3

时间:2011-03-29 19:13:57

标签: flash actionscript-3 actionscript flash-cs5

我想基于数组动态创建元素。我想把数组名称加上_panel ...所以menu_item_panel将成为settings_panel,info_panel等。我无法弄明白该怎么做?

var menu_items:Array = new Array("settings","info","debug","Feedback");
var menu_items_count:Number = menu_items.length;

var menu_height:Number = c.height / menu_items_count;
var menu_height_int:Number = 0;

for (var i:int=0; i<menu_items_count; i++)
{
    var menu_item_panel:Sprite = new Sprite();
menu_item_panel.graphics.beginFill(0x000000, 1);
menu_item_panel.graphics.drawRect(0, menu_height, c.width, menu_height);
menu_item_panel.graphics.endFill();
menu_panel.addChild(menu_item_panel);
menu_panel.addEventListener(MouseEvent.CLICK,menu_panel_click);
menu_height_int = menu_height_int + menu_height;
}

5 个答案:

答案 0 :(得分:0)

我建议您将name对象的Sprite属性设置为菜单项的名称。

menu_item_panel.name = menu_items[i];

然后在click处理程序中,检查name的{​​{1}}属性,并根据该属性执行相应的操作。

答案 1 :(得分:0)

试试这个

for (var i:int=0; i<menu_items_count; i++)
{
    var menu_item_panel:Sprite = new Sprite();
    menu_item_panel.graphics.beginFill(0x000000, 1);
    menu_item_panel.graphics.drawRect(0, menu_height, c.width, menu_height);
    menu_item_panel.graphics.endFill();
    menu_panel.addChild(menu_item_panel);
    menu_panel.addEventListener(MouseEvent.CLICK, function(){});
    menu_height_int = menu_height_int + menu_height;
    // Store the new clip in a var
    this[menu_items[i]+"_panel"] = menu_item_panel;
}
// get the clips
trace(this.settings_panel);
trace(this.info_panel);
trace(this.debug_panel);
trace(this.Feedback_panel);

答案 2 :(得分:0)

简单:

for (...)
{
    //...
    menu_item_panel.name = menu_items[i]+"_panel";
    menu_panel[menu_item_panel.name] = menu_panel.addChild(menu_item_panel);
    //...
}

那是因为两件事:

// This line set the name of the item to "settings_panel", "info_panel", etc
menu_item_panel.name = menu_items[i]+"_panel";

// This line add menu_item_panel as a child of menu_panel
// and set the property called "settings_panel", "info_panel", etc
// to the right panel
menu_panel[menu_item_panel.name] = menu_panel.addChild(menu_item_panel);

所以当你运行这一行时:

menu_panel.settings_panel;

您正在获取名为“settings_panel”的菜单项

此类设置:

object[string] = property;

适用于声明为dynamic的所有对象(MovieClipObjectdynamic)。这是在运行时向对象添加(dinamically)属性的方法。

答案 3 :(得分:0)

为什么不创建一个类并扩展sprite类,然后你可以根据需要使它成为动态的。

答案 4 :(得分:0)

我最后添加了以下内容,似乎可行。我不知道为什么我要把“这个”放在任何地方。

this[menu_items[i]+"_panel"] = menu_item_panel;
    menu_panel.addChild(this[menu_items[i]+"_panel"]);

我可以说:

 this.settings_panel.visible = false;
相关问题