Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

02.11.2010, 00:33

entschuldigung für die wiederbelebung, aber ich habe jetzt
nochmal angefangen nach dem Bug zu suchen, allerdings
verhält sich das Spiel jetzt noch merkwürdiger:
Wenn man es normal laufen lässt zeigt es lediglich weiß an
und aufgrund von printlines weiß ich, das es sich an der
Renderfunktion die Zähne ausbeißt.
Wenn man es allerdings im Schritt für Schritt modus
durchgeht, dann rendert es nach 5 sekunden den Inhalt,
wie es soll (und vor ein paar Tagen ja auch noch gemacht hat)

So langsam möchte ich einfach das ganze Projekt hinschmeißen,
aber ich muss ja auch lernen diese Probleme zu bewältigen.
Nur wie?
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

12

02.11.2010, 06:43

Also ohne Code können wir dir nicht wirklich helfen ^^

Versteh ich dich denn richtig, dass, wenn du es mit dem debugger startest, dein Programm richtig läuft?

13

02.11.2010, 23:43

mehr oder weniger...
Es braucht beim ersten frame lange (5sec) zum rendern, danach tut es was ich will.
Aber im normalen Modus dauert es entweder länger als 2 minuten oder es
klappt gar nicht (hab nach 2 min den Lauf abgebrochen)
habe mal das ganze projekt hochgeladen: http://dl.dropbox.com/u/3707394/Kriegspi…8C%2B%2B%29.zip
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

14

03.11.2010, 09:05

Hab mir den Code mal angesehen, testen konnte ich es allerdings nicht... hab keine SFML da.

Ich denke der Fehler liegt hier:

C-/C++-Quelltext

1
CShot *pShot = &((*ItPlayer)->Shoot());

Das ist in der processPlayers methode. Player::Shoot() erstellt den schuss allerdings so:

C-/C++-Quelltext

1
CShot Shot(m_pBullet, m_pSprite->GetPosition(),m_pSprite->GetRotation(),100.f);

D.h. du speicherst die adresse einer lokalen variable, mach daraus mal:

C-/C++-Quelltext

1
CShot *pShot = (*ItPlayer)->Shoot();

und

C-/C++-Quelltext

1
CShot* Shot =  new Shot(m_pBullet, m_pSprite->GetPosition(),m_pSprite->GetRotation(),100.f);


Möglicherweise ist das der Fehler.

15

03.11.2010, 16:13

Da liegt n0_0ne richtig.

Du erzeugst ein Objekt der Klasse CShot (auf dem Stack), das aber nur in der Funktion zur Verfügung steht, in der es erzeugt wurde. Demnach bekommst du später keine Adresse auf dieses - jetzt schon nicht mehr existierende - Objekt. Also geht auch im Folgenden alles weitere schief (Rendern, ...). Wenn du das Objekt auf dem Heap anlegst (wie von n0_0ne beschrieben), dann steht es dir auch noch später zur Verfügung und du kannst mit der Adresse etwas anfangen. Allerdings solltest du nicht vergessen das Objekt - wenn du es nicht mehr brauchst - mit delete zu löschen.

Habs gerade auch mal ausgetestet. Funktioniert. Der Schuss wird gerendert.


Ach ja, kann sein das das an der Konvertierung für VC++ 2010 lag aber in den Projekteigenschaften waren bei mir nur die LIB's für die Release Version eingetragen, bei Debug fehlte einiges. Will mal hoffen du entwickelst nicht mit der Release-Version?! ;)

Gruß
SaRu_

16

03.11.2010, 17:58

Danke, werde es gleich mal einbauen

@SaRu *pfeiff* neeeein keine release Version *umstell*
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

Werbeanzeige