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

1

25.06.2010, 16:43

SDL_Game Asteroid - Bug

Hey!

Ich wollte heute einen Punktestand und eine Lebensanzeige für das SDL_Game aus dem Buch schreiben.
Ich habe beides bereits fertig, und deshalb ist mir jetzt ein Bug aufgefallen, der auch schon in der Source - Version ist.

Daher meine Frage, ob dass schon mal jemandem aufgefallen ist und ob es schon jemandem gelungen ist, diesen Bug zu beheben.

Und zwar passiert es bei jedem Neustart des Spieles, dass der erste Asteroid der erscheint, IMMER vernichtet wird.
Entweder fällt er aus dem Bildschirm und wird so deaktiviert, was weiteres kein Problem darstellt. Ich habe in meinem Programm aber nur die Collision mit dem Raumschiff überprüft und auch dort wird mir ein Leben abgezogen, obwohl der erste Asteroid das Raumschiff nicht berührt, sondern eben nur den Bildschirmrand verlässt.

Und weiteres ist mir aufgefallen, dass man den ersten Asteroiden auch IMMER zerschießen kann. Es ist vollkommen egal, ob der Schuss den ersten Asteoiden trifft oder nicht, er wird immer, auch durch einen Schuss, zerstört.

Dieses Problem tritt immer NUR beim ERSTEN Asteroiden auf, um das nocheinmal gesagt zu haben ^^

Ist dieses Problem bekannt? Gibt es dafür eine Fehlerbehebung, denn ich kann den Fehler im Programm nicht finden?
Oder tritt dass gar nur bei meiner Source - Version vom Buch auf 8|

Liebe Grüße !

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ombalat« (25.06.2010, 21:29)


2

28.06.2010, 15:34

Also ich hab das Problem jetzt selber gelöst.
Das Problem dabei war, dass der erste Asteroid mit einem falschen Rect initialisiert wurde.

Wenn man in der Collisionsprüfung das Rect manuell einstellt, wird der Bug behoben

Code zum Einfügen:

C-/C++-Quelltext

1
2
3
4
5
6
void CGame::CheckCollision()
{
    //Korrektur für das Rect des Asteroiden
    RectAsteroid.w = 64;
    RectAsteroid.h = 64;
}

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

28.06.2010, 15:43

man könnte wenn man etwas erfahrung gesammelt hat auch objektorientiert programmieren und das im konstruktor der spriteklasse machen.
die gameklasse von heiko ist total überladen. leider gehts nicht anders weils eben ne einführung ist und die erklärungen das kapitel sprengen würden :/
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

4

28.06.2010, 16:05

man könnte wenn man etwas erfahrung gesammelt hat auch objektorientiert programmieren und das im konstruktor der spriteklasse machen.
die gameklasse von heiko ist total überladen. leider gehts nicht anders weils eben ne einführung ist und die erklärungen das kapitel sprengen würden :/

Wird im Buch "3D - Spieleprogrammierung" näher darauf eingegenagen?
Ich hatte nämlich vor, dass ich mir das später auch mal zulegen und durcharbeiten werde ...

5

28.06.2010, 16:05

Code zum Einfügen:

C-/C++-Quelltext

1
2
3
4
5
6
void CGame::CheckCollision()
{
//Korrektur für das Rect des Asteroiden
RectAsteroid.w = 64;
RectAsteroid.h = 64;
}
Sehe ich das richtig? Du willst das Rect des Asteroiden bei jedem Überprüfen auf Kollision neu korrigieren? Ich würe behaupten, das gehört nicht in die CheckCollision() rein ;)

Gruß
SaRu_


*EDIT*:


Wird im Buch "3D - Spieleprogrammierung" näher darauf eingegenagen?

Also ich würde sagen es wird eher vorausgesetzt. Findet natürlich Anwendung, wird aber, soweit ich mich erinnere, nicht weiter drauf eingegangen;)

6

28.06.2010, 16:07

Zitat

Wird im Buch "3D - Spieleprogrammierung" näher darauf eingegenagen?
Ich hatte nähmlich vor, dass ich mir das später auch mal zulegen und durcharbeiten werde ...


Hm, du solltest nach Durcharbeiten der Kapitel bis 12 von Heikos Buch eigentlich die Grundlagen der OOP beherrschen. (Weisste nichmehr was das ist, dann blättere mal in der Einleitung :) )

7

28.06.2010, 16:10

Zitat

Wird im Buch "3D - Spieleprogrammierung" näher darauf eingegenagen?
Ich hatte nähmlich vor, dass ich mir das später auch mal zulegen und durcharbeiten werde ...


Hm, du solltest nach Durcharbeiten der Kapitel bis 12 von Heikos Buch eigentlich die Grundlagen der OOP beherrschen. (Weisste nichmehr was das ist, dann blättere mal in der Einleitung :) )

OOP = Objekt Orientierte Programmierung ... Das weiß ich ^^
Ich hab das wegen Nachos Kommentar gefragt ;)

8

28.06.2010, 16:14

Sehe ich das richtig? Du willst das Rect des Asteroiden bei jedem Überprüfen auf Kollision neu korrigieren? Ich würe behaupten, das gehört nicht in die CheckCollision() rein ;)
Hmm ... Da is was dran ^^

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

9

28.06.2010, 16:22

nein es wird nicht darauf eingegangen.
auch hier gilt der letzte satz aus diesem post.
effektiv c++ programmieren kann auch nicht schaden.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

10

28.06.2010, 16:40

Hm, die Frage ist, ob das für ihn Sinn macht, das so früh in seiner "Programmierkarieere" zu kaufen ;)
Da dürfte ihm einfach noch die Erfahrung und so manches Wissen Fehlen.

Werbeanzeige