Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 1.6] usuwanie obiektu (std::vector)

Ostatnio zmodyfikowano 2013-01-13 19:59
Autor Wiadomość
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:

C/C++
std::vector < Enemy > Enemies;
Enemies.push_back( enemy );

Do usuwania przeciwników próbuje coś takiego ale po kolizji wywala błąd aplikacji:

C/C++
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
P-73735
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.
P-73748
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
P-73751
Wasilek
» 2013-01-13 17:02:16
Ja w takim przypadku jako warunek daję x<vector.size() :)
P-73818
Mrovqa
» 2013-01-13 19:59:39
Ja w takim przypadku jako warunek daję x<vector.size() :)
C/C++
for( unsigned int j = 0; j <= n; j++ ) // n=Enemies.size() ??
{
    if( collisionWeapon_Enemy( Window, Enemies[ j ] ) )
    {
        Enemies.erase( Enemies.begin() + j ); // usuwamy tutaj obiekt, ale n nie aktualizujemy = spowoduje to pozniej wyjscie poza zakres
    }
}
Tak poza tym, to nie powinno być
for( unsigned int j = 0; j < /*=*/ n; j++ )
?
P-73847
« 1 »
  Strona 1 z 1