У меня проблема с циклическим циклом по вектору, и удаление значений из другого вектора иногда приводит к сбою моей программы. У меня есть этот вектор целых, чтобы отслеживать, какие элементы должны быть удалены.
std::vector<int> trEn;
Затем я перебираю этот вектор:
struct enemyStruct {
float x, y, health, mhealth, speed, turnspeed;
double angle, tangle;
};
std::vector<enemyStruct> enemies;
Цикл выглядит так:
for ( unsigned int i = 0; i < bullets.size(); i++ ) {
for ( unsigned int j = 0; j < enemies.size(); j++ ) {
if ( bullets[i].x > enemies[j].x-10 && bullets[i].x < enemies[j].x+10 && bullets[i].y > enemies[j].y-10 && bullets[i].y < enemies[j].y+10 )
{
enemies[j].health-=bullets[i].dmg;
if(enemies[j].health<=0){trEn.push_back(j);break;}
}
}
}
Вектор маркеров - это просто еще один вектор, похожий на вектор врагов, но с пулями в нем. Кажется, проблема не в этом. Весь этот код работает хорошо, но когда дело доходит до фактического удаления элементов из вектора моих врагов, программа иногда вылетает.
std::reverse( trEn.begin(), trEn.end() );
for ( unsigned int g = 0; g < trEn.size(); g++ ) {
unsigned int atmp = trEn.at(g);
if(atmp<=enemies.size()&&atmp>=0)enemies.erase(enemies.begin()+atmp,enemies.begin()+atmp+1);
} trEn.clear();
Сначала я переворачиваю вектор int
´s так, чтобы он шел вперед-назад. Если бы я этого не делал, все значения после trEn[0]
были бы недействительными.
Это цикл, который дает мне сбой, но только иногда. То, что я пытаюсь сделать, это шутер сверху вниз, и кажется, что, когда нужно убрать много вещей одновременно, он просто падает. Пожалуйста, помогите мне с этим!
Просто спросите, неясно ли мне или что-то пропущено.