2011-03-29 134 views
0

我想動態創建基於數組的元素。我想只是把數組名稱和附加_panel ...所以menu_item_panel將成爲settings_panel,info_panel等。我無法弄清楚如何做到這一點?動態變量名 - Actionscript 3

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; 
} 

回答

0

我會建議你Sprite對象的name屬性設置菜單項的名稱。

menu_item_panel.name = menu_items[i]; 

然後在你的click處理您檢查event.targetname財產,並執行基於該適當的行動。

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); 
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)。這是在運行時將(屬性)屬性添加到對象的方式。

+0

精靈**不**動態! – NemoStein 2011-03-29 19:56:42

+0

NemoStein它看起來你是正確的。我收到以下錯誤:ReferenceError:錯誤#1056:無法在flash.display.Sprite上創建屬性settings_panel。 – keith 2011-03-29 19:57:42

+0

對不起,回覆編輯。你是對的。我從我的記憶中寫下了這些。再次抱歉。 – 2011-03-29 20:12:27

0

爲什麼不製作一個類並擴展sprite類,那麼你可以使它成爲動態的,如你所需。

+0

The_asMan ...我從來沒有這樣做,我不知道該怎麼做...... – keith 2011-03-29 20:46:04

+0

啊,我看到上面的答案後,我看到我誤解了你正在做的事情。忽略這個答案:)另外,如果您正在編寫actionscript,您可能需要查看並瞭解如何創建類文件,因爲actionscript是面向對象的編程語言,而類文件是OOP的基礎。熟悉類是使用任何OOP語言成爲優秀程序員的關鍵。 – 2011-03-29 21:38:05

0

我結束了添加以下內容,它似乎工作。我不知道爲什麼我必須在任何地方放置「這個」。

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

我可以說使它可見:

this.settings_panel.visible = false; 
+0

不知道我可以解釋這個好,但會給它一個shot.The「這個」關鍵字是定義的範圍。在你的情況menu_items是一個包含元素的數組。第一個元素menu_items [0]有一個字符串值'set​​tings',通過這樣做['settings'+'_ panel']你說在當前範圍內有一個settings_panel屬性。沒有「this」['settings_panel']就沒有標識符,因此編譯器不知道在哪裏查找屬性。 – 2011-03-29 21:56:10