我正在用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;
}
}
}
答案 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);
}
}