Witam,
pewnie to prosta rzecz ale zjadła już kilka moich godzin tak, że zaczynam panicznie wyrywać włosy z głowy, proszę o pomoc. Podsyłam link do repozytorium z całym:projektem https://github.com/Blauto/2d_Game/tree/master/Arcanoid/Arcanoid
Problem polega na tym że elementy (Slaby) nie wiem jak to ująć ale nie do końca usuwają się z listy. W jednej pętli program je widzi(przy sprawdzaniu kolizji) a w innej nie (przy rysowaniu) pomimo tego ze pętle są identyczne. Zauważyłem że zmiany które wykonuje na elementach listy poprzez wskaźnik nie zapisują się (dałem specjalne ify które mają to sprawdzać )
sf::Vector2f SlabMenager::checkColision(sf::CircleShape & ball)
{
for (it = slabList.begin(); it != slabList.end(); it++) {
if (ball.getGlobalBounds().intersects(it->slab.getGlobalBounds())) {
sf::Vector2f slabPosPom = it->slab.getPosition();
it->removeLive();
if (it->live < 1)
slabList.erase(it);
return slabPosPom;
}
}
return sf::Vector2f(0.0f, 0.0f);
}
void Slab::removeLive()
{
live--;
}
a to pętla która pomimo erasa w poprzedniej i tak przechodzi przez wszystkie elementy które były i rysuje wszystko
dodałem tego ifa żeby dodatkowo sprawdzić skoro wcześniej na tych elementach odejmowałem to ta zmiana powinna być do sprawdzenia nawet jeżeli przechodzę przez wszystkie elementy i tego wcześniejszego erasa by tam miało nie być to live powinno być mniejsze od 0, ale operacji remove live tak jakby nie pamięta :P
for (it = slabList.begin(); it != slabList.end(); it++) {
if (it->live > 0) {
it->update();
it->Draw(game->window);
}
}
Dziękuję za pomoc!