JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=f346394b2a2c354d415992b51be2429bMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Element aus einer Liste löschen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 20:05    Titel: Element aus einer Liste löschen Antworten mit Zitat

Hi
Ich habe ein Problem. Ich habe ein Liste erstellet in dem die ganzen Schüsse eines Spiels verwaltet werden. Wenn der Schuss nun die Bildschirmgrenze überschritten hat soll er gelöscht werden. Hier ist mal mein code:
CPP:
   for(its = shots.begin(); its != shots.end(); its++)
   {
      if(its->x > 1024 || its->x < 0 || its->y > 768 || its->y < 0)
      {
         shots.erase(its);
      }
      else
      {
         shot.SetPosition(its->x, its->y);
         shot.SetRotation(its->rotation);
         shot.Draw();
         shot.Animate(Framerate);
         its->x += its->xspeed/Framerate;
         its->y += its->yspeed/Framerate;
      }
   }

Wenn ein ein Schuss nun die Bildschirmgrenze überschreitet dann kriege ich den Fehler: list iterator not incrementable
woran liegt es? Question
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.02.2006, 20:11    Titel: Antworten mit Zitat

its = shots.erase(its);
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 20:21    Titel: Antworten mit Zitat

hm..es klappt jetzt aber nur wenn dies nicht das letzte Element war.

hat irgendwer eine Ahnung wieso?

@FH hab den Banner jetzt ma komplett rausgemacht weil ich das eh was falsch verstanden hab Wink
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 20:39    Titel: Antworten mit Zitat

Es ist ja schon komisch, dass du in deiner for-Schleife den iterator inkrementieren kannst, aber er bei erase nen Fehler ausspuckt, wenn du das versuchst...
Entweder is in der STL was ganz gewaltig falsch, oder du hast deinen iterator irgendwie komisch definiert...
Was liefert er denn jetzt für nen Fehler beim löschen des letzten Elements?

Wegen Sig: Wie du meinst...
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 20:45    Titel: Antworten mit Zitat

ok ich hab ma die Fehlermeldung ma hochgeladen
http://img350.imageshack.us/img350/3578/test1wi.jpg
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 20:50    Titel: Antworten mit Zitat

Könntest du mal die genau Zeile geben in der das crasht? Ist das der Kopf der FOR-Schleife? Oder der erase-Aufruf? Wenn das der Kopf ist, hat mir jemand gerade die Lösung gesagt...
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 20:54    Titel: Antworten mit Zitat

Es ist doch keine Zeilenangabe angegeben nur die Zeile in list in der STL...
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.02.2006, 21:02    Titel: Antworten mit Zitat

http://www.jliforum.de/board/viewtopic.php?p=40336#40336
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 21:09    Titel: Antworten mit Zitat

k thx FH
hat alles geklappt Smile

Danke an alle
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 21:17    Titel: Antworten mit Zitat

Ich dachte eigentlich du nimmst Fallens Lösung, da hab ich meine gelöscht... Also hier nochmal:
FH hat Folgendes geschrieben:
Hmm... Debuggen???
Also egal... Versuchen wir es so, wie mein "Tipp" es gesagt hat...
Du darfst net im Kopf der Schleife inkrementieren. Warum?
Du löscht ein Objekt. Dann zeigt der iterator auf das Ende der List. Dann wird er inkrementiert (was nicht geht, da er jetzt aus der Liste rausläuft). Erst dann wird getestet, ob die Liste zu Ende ist. (Hoffe mal, das stimmt).
So oder so ähnlich...
Probier mal folgende while-Schleife:
CPP:
   its=shots.begin();
   while(its!=shots.end())
   {
      if(its->x > 1024 || its->x < 0 || its->y > 768 || its->y < 0)
      {
         its=shots.erase(its);
         if(its==shots.end())
         {  break;  }
      }
      else
      {
         shot.SetPosition(its->x, its->y);
         shot.SetRotation(its->rotation);
         shot.Draw();
         shot.Animate(Framerate);
         its->x += its->xspeed/Framerate;
         its->y += its->yspeed/Framerate;
      }
      its++;
   }

Ist wahrscheinlich nicht das beste und effektivste, aber Versuch es mal.
Gruß und dank an den Tippgeber

FH

So. Der Vollständigkeit halber.
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 05.02.2006, 21:18    Titel: Antworten mit Zitat

ups hab Fallens Antwort ganz übersehen Embarassed
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum