Пули убивают только первого врага

Я делаю 2D-игру на C ++ и пытаюсь стрелять врагов. Когда пуля сталкивается с первым оказанным врагом, то враг хорошо убивается и удаляется из 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;
}
}
}

2

Решение

Проблема в том, что ваш вектор врагов обновляется после каждого стирания — таким образом, текущий индекс больше не является правильным.
Лучший способ перебрать вектор врага — начать с конца вектора врага. Таким образом, когда вы удаляете элемент, индекс по-прежнему корректен:

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);
}
}
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector