Allegro 5 budowa gier
Ostatnio zmodyfikowano 2013-04-12 22:16
Elaine |
» 2013-04-07 15:37:03 vec.erase( i ); unieważnia iterator i. | Niekoniecznie. |
Koniecznie, 23.3.6.5/3: Effects: Invalidates iterators and references at or after the point of the erase. |
|
|
ison |
» 2013-04-07 15:39:37 @hincu opanuj się, jeśli nie masz nic ciekawego do powiedzenia to nie pisz. Monika90 miała akurat rację. |
|
maly |
» 2013-04-08 17:33:04 Podbije temat bo teraz nie rozumiem,skoro mówicie że "usuniętego" iteratora nie można użyć to czemu poniższy kod działa u mnie prawidłowo? class CKlasa { public: CKlasa( int b ) : bb( b ) { } int bb; };
int main() { std::vector < CKlasa > VecKlasa; for( int q = 0; q < 1000; ++q ) VecKlasa.push_back( CKlasa( q ) ); std::vector < CKlasa >::iterator itP; for( itP = VecKlasa.begin(); itP != VecKlasa.end(); ++itP ) { VecKlasa.erase( itP ); --itP; } for( itP = VecKlasa.begin(); itP != VecKlasa.end(); ++itP ) std::cout <<( * itP ).bb << std::endl; return 0; } //Down No to czeka mnie pare przeróbek. Ciekawe ile jeszcze niespodzianek kryje Standard Template Library?;P |
|
pekfos |
» 2013-04-08 19:22:47 Iterator nie jest modyfikowany przez erase, dalej wskazuje na to samo miejsce w pamięci. Vector usuwając zakres ze środka tylko kopiuje/przenosi elementy za zakresem w miejsce usuniętych, więc iterator wskazuje na pierwszy element, który był za usuwanym zakresem (jeśli jakiś tam był).
Standard jednak mówi, że tego iteratora nie należy używać, więc to, że twój kod działa, zależy od implementacji biblioteki standardowej. Pod inną może być problem. |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2013-04-09 22:11:33 for( itP = Pociski.begin(); itP != Pociski.end(); itP++ ) { for( itR = Robaki.begin(); itR != Robaki.end(); itR++ ) { if( Collision( robak1, pociskbmp, itP->getX(), itP->getY(), itR->getX(), itR->getY(), 20, 20 ) ) { itR = Robaki.erase( itR ); } } } to jest moja funkcja która sprawdza kolizję dołączyłem to do starego kodu działa usuwanie robaków ale tylko do ostatniego elementu.Np mogę zestrzelić 9 pierwszych z dziesięciu a jak zestrzelę 10tego to się zacina także się zacina jak od razu zestrzelę ostatni a 9 pozostałych jest na swoim miejscu . Pewnie jakiś wyciek pamięci. To samo tyczy się pocisków nie mogę usunąć ostatniego elementu. Trochę kombinowałem ale nie mogę coś tego ustawić ;/ proszę o pomoc. |
|
Monika90 |
» 2013-04-10 00:00:41 Powinieneś inkrementować ierator itR tylko wtedy, gdy nie wywołałeś itR = Robaki.erase( itR ); Przyjrzyj się uważnie przykładowi, który podałam na poprzedniej stronie. Tam jest petla while, a po if jest else. |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2013-04-10 08:57:41 Dzięki wielkie :) |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2013-04-10 16:28:28 mam jeszcze jedno pytanie czy za pomocą timerów można jakoś przyspieszyć działanie aplikacji? Jak za dużo jest pocisków to gra zaczyna się przymulać trochę. |
|
1 2 « 3 » 4 5 |