如何访问AS3中的对象

时间:2015-02-07 16:36:10

标签: actionscript-3 flash

我写了这段代码

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函数时的输出错误: TypeError:错误#1010:术语未定义且没有属性。

3 个答案:

答案 0 :(得分:1)

对象"敌人"没有" enemyName"属性。 试试这个:

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

答案 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);

答案 2 :(得分: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函数:

createEnemy(goblin_stats);

function createEnemy(stats:Object):void {
    e_hp = stats.hp;
    e_mp = stats.mp;
    // and so on
}

或更好:

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