Witam,
Od pewnego czasu borykam się z problemem w mojej mini grze. W kodzie tworzę vector którego następnie wypełniam dziesięcioma sprite'ami. Ich ruch polega na sprawdzaniu czy pierwszy z lewej przeciwnik doleciał do lewej lub prawej krawędzi, jeśli tak to obniżam ich wysokość i zmieniam kierunek ruchu. Problem pojawia się przy kolizji pocisku z wrogiem, kiedy pocisk trafi statek to usuwam go z vectora jednak w praktyce kompilator wyrzuca mi taki oto błąd: “vector iterator not decrementable”. Wiem ,że chodzi o problem z pierwszym statkiem w vecotrze, bo kiedy w pętli for w której wykrywane jest zderzenie zmienię "środkowy" argument na it > tab.begin(); to gra śmiga tylko, że pierwszy minionek w ogóle nie reaguje na pocisk
Zderzenie pocisku z minionkiem
for (auto it = tab.end() - 1; it >= tab.begin(); --it)
{
if (sprite_bullet.getGlobalBounds().intersects(it->getBound()))
it=tab.erase(it);
}
// Enemy movment
if (flag_min == true)
{
for (int i = 0; i <= tab.size() - 1; i++)
{
tab[i].movel(time);
}
}
// dojscie minionka do lewej krawedzi
Enemy im = tab.front();
if (im.getPosX() <= -10)
{
flag_min = false;
for (int i = 0; i <= tab.size() - 1; i++)
{
tab[i].spos(tab[i].getPosX(), tab[i].getPosY());
}
}
if (flag_min == false)
{
for (int i = 0; i <= tab.size() - 1; i++)
{
tab[i].movep(time);
}
}
// dojscie minionka do prawej krawedzi
Enemy en = tab.back();
if (en.getPosX() >= 750)
{
flag_min = true;
for (int i = 0; i <= tab.size() - 1; i++)
{
tab[i].spos(tab[i].getPosX(), tab[i].getPosY());
}
}
Przesyłam również zdjęcie gry, żeby lepiej zorganizować cała sytuację:
Tak wygląda gra jak zmienię w pętli for argument z it >= tab.begin(); na it > tab.begin();, bo w przypadku pierwszym gra się w ogóle nie włącza.
Jeśli potrzebujecie więcej kodu to tylko napiszcie, a wyślę.