Cześć robię grę typu Space Invaders na projekt w SFML, i zderzyłem się z problemem który przewyższa moje umiejętności, albowiem sprawdzam kolizję pocisku z przeciwnikiem i wszystko działa tak jak powinno, do momentu kiedy wewnątrz kontenera jest jeden obiekt typu Bullet, kiedy są już dwa lub więcej i nastąpi kolizja to otrzymuję błąd "Unhandled exception at 0x00007FFF7BA9DD7E (ucrtbase.dll) in SI.exe: Fatal program exit requested.". Część zakomentowana spełnia tą samą funkcję co ta wyżej (tak mi się przynajmniej wydaje). Shots fired przyjmuje wartość 0, po dodaniu obiektu Bullet do wektora bullets jest inkrementowana. Co warto wspomnieć każdy Bullet posiada wartość int ID która jest równa Shots fired (pierwszy pocisk 0 drugi 1 itp.) Proszę was o pomoc jak to można rozwiązać, wydaje mi się że winny jest tutaj iterator, albo bardziej jego specyfika.
Kod:
void Bullet::hit(vector<Enemy>& enemies,vector<Pixel>& oneShield, vector<Bullet>& bullets, int &killedEnemies, int shotsFired) {
for (auto& enemy : enemies) {
if (enemy.shape.getGlobalBounds().intersects(this->shape.getGlobalBounds())) {
for (auto i = enemies.begin(); i < enemies.end(); i++) {
if (i->ID == enemy.ID) {
enemies.erase(i);
break;
}
}
killedEnemies = killedEnemies + 1;
auto it = bullets.begin();
bullets.erase(it);
/*
for (auto j = bullets.begin(); j < bullets.end(); j++) {
if (j->ID == this->ID) {
bullets.erase(j);
break;
}
}
*/
}
}