Hallo,
ich habe Kapitel 12 nun zum 1 1/4 mal durch gelesen und so das grobe Verstanden.
Wie gerendert wird und wie dann alles auf Spieldfeld kommt, Steuerung u.s.w versteh ich alles.
Was mir allerdings noch Kopfschmerzen macht íst die Kollsion. Ich wollte nun auch eine Kollision zwischen Spieler und Asteriod einbauen.
Leider ohne Erfolg.
Ich fang mal zu erklären was ich gemacht habe. (am besten es weiß jemand der auch das Buch hat. :p ).
Also...
Ich habe mir in der Player.hpp ein Rect für den Spieler erstellt (soviel ich weiss ist ein Rect die größe und so. richtig?)
|
C-/C++-Quelltext
|
1
2
3
|
SDL_Rect m_Rect; //Rect des Spielers
float m_fXPos; // X-Position des Spielers
float m_fYPos; // Y-Position des Spielers
|
Nach dem bewegen in der Funktion ProccesMoving aktuallisiere ich die Koordinaten im Rect. (wobei sich ja nur das X ändert)
|
C-/C++-Quelltext
|
1
2
|
m_Rect.x=m_fXPos;
m_Rect.y=m_fYPos;
|
Dann in der CGame holle ich mir das Rect über eine Funktion Names GetRect und speicher das ganze in einer eigenen Variable von CGame
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
CPlayer *Player=new CPlayer;
// Rects für Asteroiden und Schüsse
SDL_Rect RectAsteroid;
SDL_Rect RectShot;
SDL_Rect RectPlayer = Player->GetRect ();
|
Nun alles durchlaufen und Prüfen (Naja so wie ich mir das eben Gedacht habe)
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
for (ItAsteroid = m_AsteroidList.begin ();
ItAsteroid!= m_AsteroidList.end ();
++ItAsteroid)
{
RectPlayer=Player->GetRect ();
RectAsteroid=RectAsteroid = ItAsteroid->GetRect ();
if(RectPlayer.y < RectAsteroid.y + RectAsteroid.h &&
RectPlayer.y + RectPlayer.x > RectAsteroid.y &&
RectPlayer.x < RectAsteroid.x + RectAsteroid.w &&
RectPlayer.x + RectPlayer.x > RectAsteroid.x)
{
Player->Reset ();
}
|
Ich stell jetzt mal einfach mal die banale Frage: Was mach ich falsch?
edit: löschen von Objekten nach Kollision fehlt noch aber ich wollte erstmal das , dass klappt.