Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Exigo Mini JLI'ler
Anmeldedatum: 02.05.2008 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 02.05.2008, 14:59 Titel: Buch Kapitel 25 (JLI_ASTEROIDS) |
|
|
Hi erstmal
Hab mir vor kurzem das Buch (DirectX 9 und Visual C++) aus unserer Schulbibliothek ausgeborgt.
Mittlerweile bin ich beim Kapitel 25 angelangt und hab da so meine probleme mit dem Beispiel.
Das Spiel startet ganz normal raumschiff + 2 Asteroiden werden dargstellt
und die Asteroiden bewegen sich auch schön. Spieler bewegung funktioniert auch (beschleunigen/verlansamen/richtungsändern)
Nur wenn man jetzt einen Schuss abfeuert und dieser aus dem Spielfeld geht oder einen Asteroiden trifft oder man selbst von einem Asteroiden getroffen wird hängt sich das Spiel mit folgener Fehlermedlung auf:
Code: | Debug Assertion Failed!
.....
Expression: list iterator not incrementable |
Debuggen lässt sich das ganze gar nicht richtig da mit dem Spiel auch der Compiler hängt.
Ich verwende Visual Studio 2008 unter XP
Der Code ist 1:1 von der Beispiel CD
Ich hoff ihr könnt mir helfen
mfg Exigo |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.05.2008, 15:26 Titel: |
|
|
sinnvoll debuggen kann man eigentlich am besten im windowed mode, da sonst beim taskswitch das ding hängt wegen device lost usw. Also in den Fenstermodus wechseln, und dann debuggen. Sonst setzt du vorher break points. Wichtig ist auf jeden fall, dass du die Zeile und den Code drumherum, wos kracht, kennst. Das kannst du ja dann mal posten.
Gruß DXer |
|
Nach oben |
|
|
Exigo Mini JLI'ler
Anmeldedatum: 02.05.2008 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 02.05.2008, 21:37 Titel: |
|
|
So danke erstmal für deinen Tipp! im Fenstermodus geht nun das debuggen endlich
nur bringt mich das leider nicht weiter den immer wenn ich mich der Stelle nähere (mit einzelschritten) kommt folgender fehler:
"Für die aktuelle Position ist kein Quellcode verfügbar."
sehr verwirrend Oo
Was mir allerdings aufgefallen ist, es gibt 4 Fälle wo die Anwendung mit dem selben fehler crashed:
-Raumschiff kolidiert mit Asteroiden
-Schuss trifft Asteroiden
-Schuss verlässt das Spielfeld
-man beendet mit ESC
immer der fehler
"Expression: list iterator not incrementable"
Den Quellcode zu posten würde den Beitrag sprengen also wenn einer ne vermutung hat bzw. das problem kennt (Ich hoffe doch das dieses Beispiel programm schon mehrere ausprobiert haben auch wenn es schon ein bisschen alt ist) dann sage mir dieser bitte welcher Codeteiletwas bringt.
Muss dazu sagen das ich in der DirektX programmierung noch relativ unbewandert bin.
würde mich sehr freuen wenn jemand nen Rat weiß
mfg Exigo |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 02.05.2008, 22:29 Titel: |
|
|
Ich vermute, es hat damit zu tun, dass VC2008 Listen anderes behandelt. Ich habe leider (noch) keine VC2008 da, so dass ich den Fehler nicht nachvollziehen kann. |
|
Nach oben |
|
|
Exigo Mini JLI'ler
Anmeldedatum: 02.05.2008 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 03.05.2008, 09:55 Titel: Geschafft |
|
|
So danke nochmal an alle.
Alls du gesagt hast das die Listen anders durchgegangen werden
hab ich da mal genau alles unter die Lupe genommen.
Und bin auch fündig geworden
Damit andere die das problem haben auch geholfen ist:
Der Fehler lag beim durchgehen der Listen in denen etwas gelöscht wird.
als Beispiel:
Code: |
for(it=m_ExplosionList.begin();it!=m_ExplosionList.end();it++)
{
(*it)->Move();
(*it)->Animate();
int x = (*it)->GetPosition().x;
int y = (*it)->GetPosition().y;
if((*it)->PlayedAnimation())
{
delete *it;
it = m_ExplosionList.erase(it);
}
} |
Ka Ahnung wieso VS 2008 es so nicht mag aber anscheinend kann der Fall auftreten das "it" erhöht wird obwohl schon das Listenende erreicht wurde.
Darum einfach ein bisschen umbasteln und darauf achten das dies nicht mehr passieren kann:
Code: |
for(it=m_ExplosionList.begin();it!=m_ExplosionList.end();)
{
(*it)->Move();
(*it)->Animate();
int x = (*it)->GetPosition().x;
int y = (*it)->GetPosition().y;
if((*it)->PlayedAnimation())
{
delete *it;
it = m_ExplosionList.erase(it);
}
if(it != m_ExplosionList.end()) { it++; }
} |
Also "it" aus wirklich nur dann erhöhen wenn Listenende nicht erreicht ist.
Das müsst ihr dann noch bei allen auftretenden Listen machen.
Danke nochmal für die Hilfe!
mfg Exigo |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.05.2008, 15:43 Titel: |
|
|
Das Problem mit dem löschen stand btw. auch schon in der FAQ _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Exigo Mini JLI'ler
Anmeldedatum: 02.05.2008 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 03.05.2008, 17:20 Titel: |
|
|
Jetzt wo dus sagst
Naja bin ja nochmal selber draufgekommen^^
Danke trotzdem |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 03.05.2008, 18:11 Titel: |
|
|
Exigo hat Folgendes geschrieben: |
Naja bin ja nochmal selber draufgekommen^^
|
Was das Wichtigste beim ganzen Lernprozess ist |
|
Nach oben |
|
|
|