JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

STL list mit Klasse funktioniert nicht!

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 14:20    Titel: STL list mit Klasse funktioniert nicht! Antworten mit Zitat

Ich programmiere gerade ein Spiel, bei dem man als Taucher Fische einsammeln muss.
Also hab ich eine Klasse für die Objekte geschrieben (class Objekt). Die funktioniert auch wunderbar, ich kann Objekte erzeugen, und alles ist prima.

Hier mal der Code von der Klasse:

Code:

class Objekt
{
private:
   Animation aObjekt;
   int XPos;
   int YPos;
   int XSpeed;
   int Typ;
public:

   void Set(int nTyp)
   {
      switch(nTyp)
      {
      case 1: //Ein Fisch
         aObjekt.Set("media\\regenbogenfisch.bmp", 45, 72, 1, 3, 3, &ckBlue);
         aObjekt.Start(-1);
         YPos=rand()%600;
         XPos=1024;
         XSpeed=5;
         break;
      case 2: //Eine Pflanze
         aObjekt.Set("media\\pflanze.bmp", 64, 96, 2, 1, 6, &ColorKey);
         aObjekt.Start(-1);
         YPos=768-96-96;
         XPos=1024+rand()%64;
         XSpeed=2;
         break;
      }
      Typ=nTyp;
   }

   void Show(void)
   {
      aObjekt.Show(XPos, YPos);
   }

   bool Move(void)
   {
      XPos-=XSpeed;
      if(-45>=XPos)
      {
         return true;
      }
      else
      {
         return false;
      }
   }
};


Da es aber viele Fische sein sollen, wollte ich eine STl list machen:
Code:

list<Objekt> Fischliste;
list<Objekt>::iterator it;

void NeuerFisch()
{
   Objekt nFisch;
   nFisch.Set(1);
   Fischliste.push_back(nFisch);
}

it=Fischliste.begin();
if(it->Move())//Die Funktion gibt true zurück, wenn das Objekt den Bildschirmrand erreicht
{
   Fischliste.erase(it);
}
it->Show();

Der Fisch bewegt sich, aber er wird nicht angezeigt, sondern stattdessen irgend ein paar teiel aus einer ganz anderen Oberfläche. Und sobald er den Bildschirmran erreciht hat, und gelöscht wird, stürtz das Programm ohne eine Fehlermeldung ab.

Meine Frage: Warum funkioniert die Klaase in der Liste nicht? Und warum zeigt sie wenn sie in der Liste ist den Fisch nicht korekt an? Gibt es irgendeine Möglichkeit den Fehler zu beheben?

Es ist übrigens egal, ob das Objekt in der Liste als Fisch, oder Pflanze verwendet wird. Aber meine einzel erstellten Objekte (ohne Liste) funktionieren.[/code]
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 14:54    Titel: Antworten mit Zitat

Was ist denn "Animation aObject"?

Ich habe da nämlich die Vermutung, dass es ein Problem mit dem Zuweisungsoperator gibt, also dass da irgendwo "flache Kopien2 gemacht werden, die dann Probleme machen.

Hast du denn mal ausprobiert:
Code:
Fisch einFisch;
Fisch nocheinFisch = einFisch;
einFisch.Set(1);
einFisch.Show();
nocheinFisch.Set(1);
nocheinFisch.Show();


cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 14:56    Titel: Re: STL list mit Klasse funktioniert nicht! Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
Der Fisch bewegt sich, aber er wird nicht angezeigt, sondern stattdessen irgend ein paar teiel aus einer ganz anderen Oberfläche. Und sobald er den Bildschirmran erreciht hat, und gelöscht wird, stürtz das Programm ohne eine Fehlermeldung ab.

Das könnte vielleicht an dem erase() liegen.
Durchläufst du die gesamte Liste und kommst dabei durch erase() vielleicht über das Ende der Liste hinaus?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 15:25    Titel: Antworten mit Zitat

Du musst einen Copykonstruktor definieren, in dem das Objekt für die Animation korrekt erstellt wird.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 16:13    Titel: Antworten mit Zitat

Kannst du mir mal erklären, wie das hier funktionieren soll:

Code:
it=Fischliste.begin();
if(it->Move())//Die Funktion gibt true zurück, wenn das Objekt den Bildschirmrand erreicht
{
   Fischliste.erase(it);
}
it->Show();


nach Fischliste.erase(it) ist das element it gelöscht, das heißt, du hast gar kein gültiges Element, das du mit it->Show() anzeigen lassen kannst!
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.03.2004, 16:48    Titel: Antworten mit Zitat

Animation ist eine Klasse die Animationen darstellt.
Sie besteht aus einer Oberfläche, in die die Bilddatei geöffnet wird, und zeigt dann die einzelnen Bilder hintereinander an.
Jedes Fischobjekt hat also ein Animation Objekt, welches wiederrum eine eigene Oberfläche hat. Ich weiß, das ich damit ein und dieselbe Bilddatei mehrmals in den Speicher lade, aber wenn ich einen Zeiger auf die Animation nheme, sind ja alle Animationen immer gleich (also nicht voneinander abhängig). Außerdem ist es einfacher.

Stimmt, das mit dem it->Show. Ist ja eigentlich kar, das er abstürzen muss. Danke.

@HotAcid: Ich probiers gerade mal aus.

@Hazel: Hört sich so an, als ob das mein Problem lösen könnte. Ich habe aber leider überhaupt keine Ahnung, was du damit meinst. Könntest du mir das näher erklären?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.03.2004, 19:07    Titel: Antworten mit Zitat

Ich glaub ich weiß jetzt wie ichs mache:
Ich entferne aus der Objektklasse der Funktion zum anzeigen, und lasse den Objektmanager sämtliche Objekte anzeigen. Damit sollte es dann keine Probleme mehr geben. Schade, das es nicht funktioniert hat, aber man muss halt flexibel sein. Auch wenn ich meine Planung dafür ändern muss, hauptsache ich kann das Projekt vortsetzen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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