试图区分数组中的对象

时间:2014-03-02 05:47:50

标签: arrays actionscript-3 object flash-cs5

我无法在一个函数中区分数组中的对象。 我创建了一个可容纳8个敌人的阵列

enemy:Enemy;
enemyArray:Array = [];
for (i = 0; i < 8; i++)
{
    enemy = new Enemy();
    enemyArray.push(enemy);
}

现在每个敌人都不同,因为我为它们分配了不同的字符串。例如,

enemyElemeny:String;
enemyArray[0].enemyElement = "Water";
enemyArray[1].enemyElement = "Fire";
etc....

这是问题所在。玩家根据敌人的元素造成更多伤害,然而,它对所有敌人造成相同的伤害,可能是因为我在if语句中有敌人阵营[j]。

var j:int;
for (j = 0; j < enemyArray.length; j++)
{
    if (enemyArray[j] != null)
    {
        trace(enemyArray[0].enemyElement, enemyArray[1].enemyElement)
        if (player.playerElement == "Electric")
        {
           if (enemyArray[j].enemyElement == "Water") 
               { 
                     //DO A LOT OF DAMAGE
                     damage = 20
               }
           else if (enemyArray[j].enemyElement == "Fire") 
               {
                      //DONT DO A LOT OF DAMAGE
                      damage = 10 
               }
        }
    }
}

所以,如果屏幕上有两个敌人,一个水和一个火,它会对两者造成同样的伤害。

1 个答案:

答案 0 :(得分:1)

你改变了唯一一个名为damage的变量,然后你依次为每个敌人分配这个伤害,这就是你对所有敌人造成同样伤害的原因。相反,你应该在你的那个循环中一次对一个敌人施加伤害。

var j:int;
for (j = 0; j < enemyArray.length; j++)
{
if (enemyArray[j] != null)
{
    trace(enemyArray[0].enemyElement, enemyArray[1].enemyElement)
    if (player.playerElement == "Electric")
    {
       if (enemyArray[j].enemyElement == "Water") 
           { 
                 //DO A LOT OF DAMAGE
                 damage = 20
           }
       else if (enemyArray[j].enemyElement == "Fire") 
           {
                  //DONT DO A LOT OF DAMAGE
                  damage = 10 
           }
    }
    // put all the other elements of player&enemy in here
    enemyArray[j].takeDamage(damage); 
    // and then apply the calculated damage to only j'th enemy, not to every enemy
}
}