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. struct MotionBlur { float x,y; int alpha; }; list<MotionBlur> motion; list<MotionBlur>::iterator motion_iter; HTEXTURE syf; hgeSprite *objmotion; void co_sekunde() { MotionBlur tmp; tmp.x=krolik->x; tmp.y=krolik->y; tmp.alpha=150; motion.push_front(tmp); } 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: 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: 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ę