Problem mit Liste
-
Hallo,
ich hab ein kleines Problem mit einer Liste und hoffe das mir wer helfen kann. Also ich versuch Momentan mein erstes Spiel in C++ (mit der SDL) zu schreiben und brauch dafür ne liste zum Speichern der Einheiten, wenn eine Einheit einen gewissen Punkt erreicht soll die Einheit sich in eine andere Richtung bewegen oder zerstört werden. Hab dafür auch ne Funktion gebastelt, die aber nicht so funktioniert wie ich das will.Hab jetzt schon gut nen halben Tag versucht das hinzubekommen, aber da ich noch nicht so viel Erfahrung im Programmieren von Spielen hab, find ich den Fehler nicht.
Also zu dem Fehler: Naja eigentlich recht simpel, wenn eine Einheit einen Punkt erreicht wo diese Einheit die Richtung ändern soll ändert es nicht nur die Richtung von der Einheit sondern von allen, sollte aber eben nur die von der ändern.
Naja hier mal der Code von der Funktion:
[cpp] void CGame::UpdateCreeps() { list<CCreep>::iterator It; SDL_Rect Box_A; int tile=-1; SDL_Rect Box_B; for(It= m_CreepList.begin();It != m_CreepList.end();++It) { Box_B= It->Get_Box(); for(int i=0;i<TOTAL_TILES;++i) { tile =m_pMap->GetTileTyp(i); if(tile!= TILE_BAUBAR|| tile!=TILE_WEG) { Box_A= m_pMap->GetTileBox(i); // Start Tiles if(It->Get_LastTile()==-1) { if(tile==TILE_START_OBEN) { It->SetPosition(Box_A.x+(Box_A.w-Box_B.w/2),Box_A.y+Box_A.h-Box_B.h); It->Set_LastTile(TILE_OBEN); } if(tile==TILE_START_UNTEN) { It->SetPosition(Box_A.x+Box_A.w/2-Box_B.w/2,Box_A.y+Box_A.h/2-Box_B.h/2); It->Set_LastTile(TILE_UNTEN); } if(tile==TILE_START_RECHTS) { It->SetPosition(Box_A.x+Box_A.w/2-Box_B.w/2,Box_A.y+Box_A.h/2-Box_B.h/2); It->Set_LastTile(TILE_RECHTS); } if(tile==TILE_START_LINKS) { It->SetPosition(Box_A.x+Box_A.w/2-Box_B.w/2,Box_A.y+Box_A.h/2-Box_B.h/2); It->Set_LastTile(TILE_LINKS); } } //Normale Tiles else if( (Box_A.x+(Box_A.w-Box_B.w)/2<Box_B.x+2) && (Box_A.y+(Box_A.h-Box_B.h)/2<Box_B.y+2) && (Box_A.x+Box_A.w+2>Box_B.x+Box_B.w+(Box_A.w-Box_B.w)/2) && (Box_A.y+Box_A.h+2>Box_B.y+Box_B.h+(Box_A.h-Box_B.h)/2) ) { if(tile==TILE_OBEN) { It->Set_LastTile(TILE_OBEN); } if(tile==TILE_UNTEN) { It->Set_LastTile(TILE_UNTEN); } if(tile==TILE_RECHTS) { It->Set_LastTile(TILE_RECHTS); } if(tile==TILE_LINKS) { It->Set_LastTile(TILE_LINKS); } //ENDE Tiles if( tile==TILE_ENDE_OBEN || tile==TILE_ENDE_UNTEN || tile==TILE_ENDE_RECHTS || tile==TILE_ENDE_LINKS) { It->SetAlive(false); It=m_CreepList.erase(It); } } } } } } [/cpp]Erklärung von den Variablen:
tile: schaut welcher tiletyp grad ausgewählt ist
Box_A: Geht nach und nach alle tiles durch
(Box_A.x: X-Korrdinate von der Grafik
Box_A.y: Y-Korrdinate von der Grafik
Box_A.w: länge von der Grafik
Box_A.h: höhe von der Grafik)
Box_B: Geht alle einheiten in der Liste durch
TILE_...: sind Variablen die Werte speichern, was das für ein tile istNaja hoff mal ich konnt das so ungefähr erklären.
Fals ich noch was posten soll einfach bescheid sagen.
Noch n Bild
http://www.pic-upload.de/view-2149986/fehler.jpg.html
weiß zwar nicht ob das Bild so viel hilftDanke schon mal im voraus
mfg stefen
-
Überreisse den Code jetzt nicht.
Bau doch einfach ein Testprogramm in dem du ein Minimalbeispiel mit Konsolenausgabe machst.
Dann siehst du schon, woran es liegt.
-
ok hab den Fehler gefunden, lag aber nicht an der Liste sondern darann wie ich die Einheiten gerendert hab.
Naja kann das jetzt nicht so gut erklären, aber es geht jetzt auf jeden Fall.und noch mal ein Danke an Derbe