Marcin1147 Opublikowano 19 Stycznia 2010 Udostępnij Opublikowano 19 Stycznia 2010 Hej, pisze sobie w C++ taki, hmmm... Motion-blur, i mam problem z usuwaniem iteratorów z listy STL w pętli "for". Gdy zakomentuję pogrubioną linijkę kodu to blur działa, gdy nie to dostaje errora: list iterator is not incrementable... Pomóżcie. Cytat Cytat struct MotionBlur { float x,y; int alpha; }; list<MotionBlur> motion; list<MotionBlur>::iterator motion_iter; HTEXTURE syf; hgeSprite *objmotion; Cytat void co_sekunde() { MotionBlur tmp; tmp.x=krolik->x; tmp.y=krolik->y; tmp.alpha=150; motion.push_front(tmp); } Cytat for(motion_iter=motion.begin();motion_iter!=motion.end();motion_iter++) { if((*motion_iter).alpha>0) { (*motion_iter).alpha-=10; objmotion->SetColor(ARGB( (*motion_iter).alpha ,255,255,255),-1); objmotion->Render( (*motion_iter).x , (*motion_iter).y); } else motion.erase(motion_iter); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 19 Stycznia 2010 Udostępnij Opublikowano 19 Stycznia 2010 for(motion_iter=motion.begin();motion_iter!=motion.end();) { if(motion_iter->alpha>0) { motion_iter->alpha-=10; objmotion->SetColor(ARGB( motion_iter->alpha ,255,255,255),-1); objmotion->Render( motion_iter->x , motion_iter->y); motion_iter++; } else motion.erase(motion_iter++); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marcin1147 Opublikowano 19 Stycznia 2010 Autor Udostępnij Opublikowano 19 Stycznia 2010 Ok, działa - a jak zwolnić pamięć po tworzonej co sekundę strukturze? O, tej: Cytat void co_sekunde() { MotionBlur tmp; tmp.x=krolik->x; tmp.y=krolik->y; tmp.alpha=150; motion.push_front(tmp); } Chodzi mi o coś w stylu: Cytat void co_sekunde() { MotionBlur tmp; tmp.x=krolik->x; tmp.y=krolik->y; tmp.alpha=150; motion.push_front(tmp); memory_free(tmp); } EDIT: BTW. Dzięki, wygląda nawet nieźle! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 19 Stycznia 2010 Udostępnij Opublikowano 19 Stycznia 2010 kasując obiekt z listy usuwasz też ten właściwy obiekt, jeśli lista nie przechowuje wskaźników, więc nie potrzebujesz nic więcej zwalniać. A obiekt lokalny tmp jest automatycznie kasowany z pamięci przy wyjściu z funkcji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się