子弹只杀死第一个敌人

时间:2014-04-26 14:47:49

标签: c++ 2d-games

我正在用c ++制作2D游戏并试图射击敌人。当子弹与渲染的第一个敌人发生碰撞时,敌人将被杀死,并将其从enemys向量中移除。然而,在第一个敌人被杀后,其他敌人不再死亡。

这是在更新功能中执行检查的地方。

size = enemys.size();
for (int i = 0; i<size; i++)
    {
        double x = enemys[i].getEnemyX();
        double y = enemys[i].getEnemyY();
        bool isShot = enemyShot(x,y);
        if(isShot == true){
            enemys.erase(enemys.begin()+i);
            size = size - 1;
        }
    }

这是敌人的射击功能。

bool GameActivity::enemyShot(double enemyX, double enemyY)
{
int size = bullets.size();
for (int i = 0; i<size; i++)
{
    double x = bullets[i].getX();
    double y = bullets[i].getY();
    if (x >= enemyX-5.0 && x <= enemyX+5.0 && y >= enemyY-5.0 &&  y <= enemyY + 5.0){
        return true;
    }
    else{
        return false;
    }
}
}

1 个答案:

答案 0 :(得分:1)

问题是你的敌人矢量在每次擦除后都会更新 - 因此,当前的索引不再正确。 迭代enemys向量的更好方法是从enemys向量的末尾开始。这样,当您擦除元素时,索引仍然是正确的:

for (size_t i = enemys.end (); i> 0; --i) {
    double x = enemys[i].getEnemyX();
    double y = enemys[i].getEnemyY();
    bool isShot = enemyShot(x,y);
    if(isShot == true){
        enemys.erase(enemys.begin()+i);
    }
}