Allegro 5 budowa gier
Ostatnio zmodyfikowano 2013-04-12 22:16
aaadam Temat założony przez niniejszego użytkownika |
» 2013-04-06 18:49:39 tam wyżej jest kod gdy wciska się "z" dodaje do wektora nowy obiekt OBJ.push_back() i rysuje nowy pocisk gdy zmienna tego pocisku dochodzi do y=0 uruchamiam OBJ.pop_back() lub OBJ.erase(iterator) i niewiem czemu program sie zacina ;/
|
|
hincu |
» 2013-04-06 21:43:44 po usunieciu zmniejsz iterator o 1, to powinno pomoc to jest prosty wyciek pamieci |
|
Monika90 |
» 2013-04-06 23:36:24 Pętla takiej postaci: for( itP = Pociski.begin(); itP != Pociski.end(); itP++ ) { if( ) { Pociski.erase( itP ); } }
jest nieprawidłowa, ponieważ erase unieważnia iterator. po usunieciu zmniejsz iterator o 1, to powinno pomoc to jest prosty wyciek pamieci |
To jakieś bzdury. Prawidłowo będzie tak: itP = Pociski.begin(); while( itP != Pociski.end() ) { if( ) { itP = Pociski.erase( itP ); } else ++itP; }
DOPISANE: Ewentualnie można zrobić tak: Pociski.erase( std::remove_if( Pociski.begin(), Pociski.end(),[]( const Pocisk & p ) { return p.y <= 0; } ), Pociski.end() );
Ale czy to jest lepsze? Jest to kwestią dyskusyjną. Może być różnica w wydajności. |
|
hincu |
» 2013-04-07 10:54:10 monika to nie bzdury, bzdura to ty jestes, KAZDY sposob jest dobry jesli dziala, ty uzylas petli while a on for, wiec kazalem mu odjac element by nie byl dodawany przy nastepnym ruchu petli... w czym widzisz problem pani pro programistko? O_O |
|
Monika90 |
» 2013-04-07 12:32:44 KAZDY sposob jest dobry jesli dziala |
Zaproponowany przez Ciebie nie działa. vec.erase( i ); unieważnia iterator i. Nieważnego iteratora nie można zmniejszyć o 1, nie można porównać z vector.end(), itp. Jedyne co można, to zniszczyć go, albo przypisać mu nową wartość: i = vec.erase( i ); . |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2013-04-07 14:53:15 Dziękuję bardzo teraz działa z wektorami nie miałem praktycznie styczności więcej z listami pewnie będę miał więcej problemów bo dopiero zaczynam przygodę z programowaniem gier 2d. |
|
pekfos |
» 2013-04-07 14:55:18 vec.erase( i ); unieważnia iterator i. |
Niekoniecznie. |
|
hincu |
» 2013-04-07 15:20:22 pekfos z kobieca logika nie wygrasz |
|
1 « 2 » 3 4 5 |