2015-02-07 48 views
0

對象我寫了這個代碼如何訪問在AS3

var enemies:Object = new Object(); 
//    HP MP ATK DEF MATK MDEF AGI LUCK 
enemies.Goblin = [40, 20, 6, 6, 3,  3, 4, 1]; 

其中包含這些統計信息的妖精,我創建了應該採取的統計,從enemies.Goblin並把它們放在一些變量,但它的功能將無法工作。

function createEnemy(enemyName:String):void { 

e_hp = enemies.enemyName[0]; 
e_mp = enemies.enemyName[1]; 
e_atk = enemies.enemyName[2]; 
e_def = enemies.enemyName[3]; 
e_matk = enemies.enemyName[4]; 
e_mdef = enemies.enemyName[5]; 
e_agi = enemies.enemyName[6]; 
e_luck = enemies.enemyName[7]; 

} 

這是輸出錯誤當執行createEnemy功能:類型錯誤:錯誤#1010:一個術語是不確定的,沒有屬性。

回答

1

對象「敵人」沒有「enemyName」屬性。 試試這個:

enemies[enemyName][0] 
enemies[enemyName][1] 
... 
0

將對象(一切)存儲在數組中,以便於引用。以下是關鍵代碼:

var aEnemies:Array = new Array(); 
var mcEnemy:Object = new Object(); 

mcEnemy.iHP = 40; // set iHP property to 40 

aEnemies.push(mcEnemy); // add enemy to array of enemies 

trace("enemy 0's HP: " + aEnemies[0].iHP); 
0

答案已經給出,但是你在做什麼是一個錯誤的方法。按指數訪問屬性在不久的將來會有麻煩。

這是更好地做類,但由於您使用的對象,我會嘗試使用對象太:

var goblin_stats:Object = { hp:40, mp:20, atk:6, def:6 }; // and so on 
var elf_stats:Object = { hp:35, mp:30, atk:8, def:4 }; // and so on 
... 
// add as much characters as needed 

現在我相信你只是想創建一個基於妖精統計新鮮的小妖精。只需通過統計到createEnemy功能:

​​

或更好:

function createEnemy(stats:Object):void { 
    for (var property:String in stats) e_stats[property] = stats[property]; 
} 
+0

你能解釋我爲什麼訪問屬性的索引可能創造的後患? – Cress 2015-02-07 20:40:25

+0

把它們記爲「hp」,「mp」等,而不是1,2等,要容易得多。當你的代碼變得更加複雜時,你會想要添加或刪除一些屬性。之後,你會想重新枚舉它們。這些索引需要多次更改,代碼將變得難以管理。通過添加或刪除屬性的方式來考慮,不需要更改其他屬性的代碼。如果您添加或刪除屬性「hp」,它不會影響屬性「mp」和任何其他屬性。如果您刪除屬性1,它將影響1後的所有屬性 - 它們的索引將會更改。看到? – 2015-02-07 21:35:05