Hi Leute,
habe leider nochmal ein Problem. Ich wollte das Spiel aus Kapitel 12 um ein paar PowerUps erweitern.
Das Rendern + Updaten funktioniert auch ganz gut, nur komme ich mit der Kollisionserkennung nicht weiter.
Ich will, dass der Spieler ein Leben dazubekommt, wenn der mit dem PowerUps kollidiert.
Dazu habe ich:
- eine GetRect Funktion beim Player eingebaut (wie beim Asteroiden, funktioniert auch)
- Das Player Rect in der Update (genau: ProcessMoving) Funktion des Players aktualisiert (funktioniert auch)
- eine Liste mit den PowerUps erstellt (funktioniert auch, wird ja auch zum Rendern benötigt, was ja gut geht, wenn ich die kollision weglasse)
Der Abschnitt in der Funktion für Kollisionserkennung sieht dann so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// Iteratoren für die Listen
list<CPlusLife>::iterator ItPL = m_PlusLifeList.begin ();
//Rects
SDL_Rect RectPlayer;
SDL_Rect RectPlusLife;
RectPlayer = m_pPlayer->GetRect ();
// Alle PlusLife durchlaufen
while (ItPL != m_PlusLifeList.end ())
{
RectPlusLife = ItPL->GetRect ();
// Kollision mit Spieler prüfen
if (RectPlayer.y < RectPlusLife.y + RectPlusLife.h &&
RectPlayer.y + RectPlayer.h > RectPlusLife.y &&
RectPlayer.x < RectPlusLife.x + RectPlusLife.w &&
RectPlayer.x + RectPlayer.w > RectPlusLife.x)
{
++m_Lives;
ItPL->SetAlive(false);
}
}
|
Das Problem ist jetzt, dass, immer wenn ein PowerUp gespawnt wird, sich das Spiel aufhängt.
Ich konnte den Fehler bereits eingrenzen. Er muss etwas mit der while schleife zu tun haben. Wenn ich die if Bedingung und das ganze andere Zeugs weglasse und nur die while Schleife durchlaufen wird (wenn etwas in der Liste ist, also direkt nach einem Spawn) hängt es sich auf. Wenn ich die while schleife weglasse, geht alles gut.
Mit dem Debugger geht das auch nicht so wirklich, ab dem Punkt, an dem die If-Bedingung durch ist, hängt sich auch im Debugger das Spiel auf, ohne dass irgendetwas im Debugger erscheint. Habe mehrere Haltepunkte gesetzt:
- beim Eintritt in die while schleife
- beim Eintritt in die if Bedingung
- nach der If Bedingung
Bei den ersten beiden Haltepunkten haben meiner Ansicht nach noch alle Variablen etc. gestimmt, erst nach der If-Bedingung hing es sich dann auf und es kam wie gesagt keine Ausgabe dazu.
Kann mir da bitte jemand helfen?
Danke im Voraus