2014-02-18 45 views
0

我有一個AssetManager單例,我用它作爲排序的數據提供者。如何讓對象的關鍵更加動態?

public static var L1_1:Object = {pic:'../Assets/images/test.jpg', answer:'someAnswer', pool: 'somePool'}

所以我想利用這個在其他類來獲得一個路徑的圖像類需要一個字符串作爲像這樣設置了一個param:

var image:Image = new Image(AssetManager.L1_1.pic , 540, 540);

這個偉大的工程但是,我需要增加第二個「1」上面,使其動態的,所以我可以說對於例如,

var image:Image = new Image(AssetManager.L1_5.pic , 540, 540);

我嘗試過這樣的事情,傳遞一個imageNum屬性,但無法對其進行排序。

var tempObj:Object = ['AssetManager.L' + imageNum + '_' + imageNum + '.pic']; trace(tempObj)

是否有更簡單的方法來做到這一點?謝謝!!

回答

0

AS3中的靜態和公共屬性可以使用括號語法來訪問。

下面是一個例子:

public static var L1_1:Object = {pic:'../Assets/images/test.jpg', answer:'someAnswer', pool: 'somePool'}; 

var imageNum:int = 1; 
var propertyName:String = "L1"+ "_" + imageNum.toString(); 
var tempObj:Object = AssetManager[propertyName]; 
var pathToPic:String = tempObj.pic; 
trace(pathToPic); 

上面的例子應該描繪出../Assets/images/test.jpg

然而,請注意,括號語法比點語法慢,在編譯時間類型檢查。

我希望這會有所幫助。

+0

的確很有幫助。非常感謝!你知道下面使用的數組是否會比使用上面提到的方括號慢嗎? –

+0

我猜想數組更快,但我沒有測試過這個。我會說,除非速度對你來說是一個問題,否則你應該瞄準任何最容易閱讀的內容,因爲這將是未來最容易維護的內容。 –

0

我有一個修復,現在只需使用一個數組,像這樣:

public static var L1_1:Array = new Array(); L1_1[0] = ['../Assets/images/test.jpg', "apple", "appletakeout"];

而且與調用它:

image = new Image(AssetManager.L1_1[0][imageNum], 540, 540);

和它的作品,只是感覺一點點亂。如果有更有效的方法來做到這一點,我很樂意聽到。謝謝。