Also ich habs jetzt so gemacht, dass ich das Sprite in der main erstelle und dann einfcah jedem erstellten Mob dieses als zeiger bei der render übergebe.
Wenn ich aber jetzt die erase mit dem iterator aufrufe kommt im Debug der Fehler:
Debug Assertion Failed! ... Expression. vector iterator not incrementable
hab jetzt herausgefunden, dass der Iterator durch das erase gelöscht wird, wenn ich aber einen neuen iterator erstelle und dieses auf die stelle des ersten zeigen lasse, klappt es auch nicht:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
for(Iter=vMobs.begin(); Iter<vMobs.end(); Iter++)
{
Iter->Move();
std::vector<CMob>::iterator i = Iter;
if(Iter->vPosition.x > 1000 || Iter->vPosition.x < 0)
vMobs.erase(i);
}
|
Aber eigentlich müsste es doch so funktionieren, da ja nur der ungebrauchte iterator gelöscht wird.
EDIT: hab jetzt ne lösung gefunden:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
for(Iter=vMobs.begin(); Iter<vMobs.end(); Iter++)
{
Iter->Move();
if(Iter->vPosition.x > 1000 || Iter->vPosition.x < 0)
Iter = vMobs.erase(Iter);
}
|
Hab nur keine Ahnung wieso das jetzt geht?
Ist das so weil er durch das erasen den voherigen iterator gelöscht hat aber einen neuen returned? oder wie?