[SFML 1.6] usuwanie obiektu (std::vector)
Ostatnio zmodyfikowano 2013-01-13 19:59
Unnamed789 Temat założony przez niniejszego użytkownika |
[SFML 1.6] usuwanie obiektu (std::vector) » 2013-01-12 21:07:09 Mam obiekt enemy klasy Enemy przechowujący wszystkie informacje o przeciwniku. Chciałbym aby po kolizji z pociskiem przeciwnik był usuwany z gry. Przeciwników umieszczam w tablicy vector: std::vector < Enemy > Enemies; Enemies.push_back( enemy ); Do usuwania przeciwników próbuje coś takiego ale po kolizji wywala błąd aplikacji: for( unsigned int j = 0; j <= n; j++ ) { if( collisionWeapon_Enemy( Window, Enemies[ j ] ) ) { Enemies.erase( Enemies.begin() + j ); } } Z funkcją odpowiadającą za kolizję jak również klasą przeciwnika i umieszczaniem jej obiektów w tablicy nie ma problemów więc problem tkwi w tym co znajduje się w instrukcji warunkowej if |
|
DejaVu |
» 2013-01-12 22:51:08 1. wychodzisz poza zakres tablicy (nawet bez usuwania). 2. rozmiar tablicy się zmniejszy po usunięciu elementu, ale Ty cały czas używasz 'n', zamiast liczby elementów aktualnie znajdujących się w kontenerze. |
|
Savail |
» 2013-01-12 22:56:44 Nie wiem co oznacza "n" w twojej pętli for ale być może wychodzisz poza zakres wektora? //edit ups, miałem starą kartę otwartą. Nie zauważyłem, że już odpowiedziałeś DejaVu : P |
|
Wasilek |
» 2013-01-13 17:02:16 Ja w takim przypadku jako warunek daję x<vector.size() :) |
|
Mrovqa |
» 2013-01-13 19:59:39 Ja w takim przypadku jako warunek daję x<vector.size() :) |
for( unsigned int j = 0; j <= n; j++ ) { if( collisionWeapon_Enemy( Window, Enemies[ j ] ) ) { Enemies.erase( Enemies.begin() + j ); } }
Tak poza tym, to nie powinno być for( unsigned int j = 0; j < n; j++ ) ? |
|
« 1 » |