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
Bei der Klasse CPlayer habe ich die hier folgend grünen Zeilen hinzugefügt...Zitat
void CGame::CheckCrash ()
{
list<CAsteroid>::iterator ItAsteroid = m_AsteroidList.begin ();
SDL_Rect RectAsteroid;
SDL_Rect RectPlayer;
RectPlayer = m_pPlayer -> GetRect();
while (ItAsteroid != m_AsteroidList.end())
{
RectAsteroid = ItAsteroid -> GetRect();
if (((RectPlayer.x >= RectAsteroid.x && RectPlayer.x <= RectAsteroid.x + RectAsteroid.w) ||
(RectPlayer.x + RectPlayer.w >= RectAsteroid.x && RectPlayer.x + RectPlayer.w <= RectAsteroid.x + RectAsteroid.w)) &&
RectPlayer.y <= RectAsteroid.y + RectAsteroid.h)
{
ItAsteroid -> SetAlive (false);
m_pPlayer -> loseLive();
}
if (ItAsteroid -> IsAlive())
ItAsteroid++;
else ItAsteroid = m_AsteroidList.erase (ItAsteroid);
}
}
Am Ende von CGame::Run() habe ich nochZitat
class CPlayer
{
public:
CPlayer ();
SDL_Rect GetRect()
{return m_Rect;}
void Init ();
void Quit ();
void Render ();
void Update ();
void Reset ();
void loseLive()
{m_Lives --;}
int m_getLives()
{return m_Lives;}
list<CShot> *GetShotList () {return &m_ShotList;}
private:
void ProcessMoving ();
void ProcessShooting ();
void CheckPosition ();
CSprite *m_pSpritePlayer; // Sprite für Spieler
CSprite *m_pSpriteShot; // Sprite für Laserschüsse
float m_fXPos; // X-Position des Spielers
float m_fYPos; // Y-Position des Spielers
float m_fAnimPhase; // Aktuelle Animationsphase
bool m_bShotLock; // Darf der nächste Schuss raus?
list<CShot> m_ShotList; // Liste der Schüsse
int m_Lives;
SDL_Rect m_Rect;
};
hinzugefügt.Zitat
if (m_pPlayer -> m_getLives() == 0)
m_bGameRun = false;
Community-Fossil
Community-Fossil
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 25 26 27 28 29 30 |
void CGame::CheckCrash () { list<CAsteroid>::iterator ItAstCrash = m_AsteroidList.begin (); SDL_Rect RectAsteroid; SDL_Rect RectPlayer; RectPlayer = m_pPlayer -> GetRect(); while (ItAstCrash != m_AsteroidList.end()) { RectAsteroid = ItAstCrash -> GetRect(); if (RectPlayer.y < RectAsteroid.y + RectAsteroid.h && RectPlayer.y + RectPlayer.h > RectAsteroid.y && RectPlayer.x < RectAsteroid.x + RectAsteroid.w && RectPlayer.x + RectPlayer.w > RectAsteroid.x) { ItAstCrash -> SetAlive (false); m_pPlayer -> loseLive(); } if (ItAstCrash -> IsAlive()) ItAstCrash++; else ItAstCrash = m_AsteroidList.erase (ItAstCrash); } } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
bool Collision(SDL_Rect Rect1, SDL_Rect Rect2) { if (Rect1.y < Rect2.y + Rect2.h && Rect1.y + Rect1.h > Rect2.y && Rect1.x < Rect2.x + Rect2.w && Rect1.x + Rect1.w > Rect2.x) return true; else return false; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »bewa« (04.06.2010, 23:06)
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
bool CGame::Collision(SDL_Rect Rect1, SDL_Rect Rect2) { return (Rect1.y < Rect2.y + Rect2.h && Rect1.y + Rect1.h > Rect2.y && Rect1.x < Rect2.x + Rect2.w && Rect1.x + Rect1.w > Rect2.x) } |
C-/C++-Quelltext |
|
1 2 3 4 |
if(Collision(RectX, RectY) == true) { ... } |
Community-Fossil
Zitat
if(Collision(RectX, RectY) == true)
Werbeanzeige