Я задал вопрос об этом проекте ранее (это не та же проблема), но я работаю над имитацией Space Invaders для задания.У меня почти все работает, но у меня проблемы с пулей-инопланетным взаимодействием.Я новичок в списках, поэтому я прошу прощения, если это очевидная проблема.:)
У меня есть функция, заставляющая инопланетян исчезать, когда они пересекаются с пулями, но когда пуля убивает двух из них, или если пуля пролетает мимо них и исчезает, программа застревает в бесконечностиloop (внешний цикл).
Эта функция задействована:
(если вам нужно что-то увидеть в других классах, я тоже могу добавить их)
void alienGroupMgr::disappear(shotMgr m)
{
// shotMgr is just a class that manages the bullet data (vector of ptrs to bullets)
// getSprite returns data about individual sprites
for (list<alien*>::iterator iter = theGang.begin();iter != theGang.end();) // each alien
{
alien* ptrShot = *iter;
FloatRect alienBound = ptrShot->getSprite().getGlobalBounds();
// theGang is a list of ptrs to aliens from the alien group mgr class
// alien is a class for each alien
for (int i = 0; i < m.getAmountFilled(); i++) // each bullet
{ // getlist returns an index from the vector of bullet ptrs
FloatRect bulletBound = m.getList(i)->getSprite().getGlobalBounds();
if (alienBound.intersects(bulletBound))
{
iter = theGang.erase(iter);
}
else
{
iter++;
}
}
}
}
Я протестировал версию функции, где я ограничил внешний цикл до 9 раз, используя счетчик.Он работает половину времени, а другую половину - ошибку «Выражение: невозможно увеличить итератор конечного списка».
Буду очень признателен за совет!Спасибо.