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
TigerClaw25
unregistriert
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 |
#ifndef EXPLOSION_HPP #define EXPLOSION_HPP #include "Sprite.hpp" class CExplosion { public: void Init (CSprite *pSpriteExplosion, float fXPos, float fYPos); void Update (); void Render (); bool IsAlive () {return m_bIsAlive;} void SetAlive (bool bIsAlive); SDL_Rect GetRect () {return m_Rect;} private: CSprite *m_pSpriteExplosion; // Zeiger auf Explosion-Sprite float m_fXPos; // X-Position des Explosion float m_fYPos; // Y-Position des Explosion float m_fAnimPhase; // Akt. Animationsphase der Explosion bool m_bIsAlive; // "Lebt" die Explosion noch? SDL_Rect m_Rect; // Rect der Explosion }; #endif |
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#include "Explosion.h" // Init // // Aufgabe: Asteroid initialisieren // void CExplosion::Init (CSprite *pSpriteExplosion, float fXPos, float fYPos) { // Zeiger auf Sprite kopieren und Koordinaten setzen m_pSpriteExplosion = pSpriteExplosion; m_fXPos = fXPos; m_fYPos = fYPos; // Animation beginnt beim ersten Einzelbild m_fAnimPhase = 0.0f; // Rect initialisieren m_Rect.x = static_cast<int>(fXPos); m_Rect.y = static_cast<int>(fYPos); m_Rect.w = pSpriteExplosion->GetRect().w; m_Rect.h = pSpriteExplosion->GetRect().h; // Asteroid aktivieren m_bIsAlive = true; } // Init // SetAlive // // Aufgabe: - // void CExplosion::SetAlive (bool bIsAlive) { m_bIsAlive = bIsAlive; } // SetAlive // Update // // Aufgabe: Asteroid bewegen und Position prüfen // void CExplosion::Update () { m_Rect.x = static_cast<int>(m_fXPos); m_Rect.y = static_cast<int>(m_fYPos); // Animieren m_fAnimPhase += 10.0f * g_pTimer->GetElapsed (); // Prüfen, ob die Animation am Ende angelangt ist if (m_fAnimPhase >= 128.0f) { m_fAnimPhase = m_fAnimPhase - 128.0f; m_bIsAlive = false; } } // Update // Render // // Aufgabe: Asteroid rendern // void CExplosion::Render () { m_pSpriteExplosion->SetPos (m_fXPos, m_fYPos); m_pSpriteExplosion->Render (m_fAnimPhase); } // Render |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
... ... ... // Sprite für Explosion laden m_pSpriteExplosion = new CSprite; m_pSpriteExplosion->Load ("Data/Player.bmp", 11, 64,64); m_pSpriteExplosion->SetColorKey (255, 0, 255); ... ... ... .// Kollisionsüberprüfung (Funktion) ... // Explosion des Asteroiden darstellen // Timer für nächsten Asteroiden erhöhen RectExplosion.x = RectAsteroid.x; RectExplosion.y = RectAsteroid.y; ItExplosion->Render(); ... ... ... |
Administrator
TigerClaw25
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
// PlayerHit // // Aufgabe: Position und Animationsphase prüfen // void CGame::PlayerHit() { m_HitCount = m_pPlayer->GetLives(); m_HitCount--; m_pPlayer->SetLives(m_HitCount); } // PlayerHit |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
TigerClaw25
unregistriert
C-/C++-Quelltext |
|
1 2 |
int GetLives (){return m_PlayerLive;} // Treffer übergeben (Spieler) int SetLives (int i){m_PlayerLive = i; return 0;} // Treffer setzen (Spieler) |
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 |
// Lebensenergie anzeigen m_HitCount = m_pPlayer->GetLives(); if (m_HitCount>=5) { m_pFontNumb->WriteFont("Energie: ", 530, 550, 255, 20, 50); m_pFontNumb->WriteNumber(m_HitCount, 610, 550, 255, 20, 50); GAMESCHLEIFE } else if (m_HitCount<=5 && m_HitCount !=0) { m_pFontNumb->WriteFont("Energie: ", 530, 550, 255, 20, 50); m_pFontNumb->WriteFont("Kritischer Zustand", 610, 550, 255, 20, 50); GAMESCHLEIFE } else { m_pFontNumb->WriteFont("GAME OVER", 530, 550, 255, 20, 50); } |
TigerClaw25
unregistriert
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Und die PlayerHit Funktion habe ich ja bereits gepostet.
TigerClaw25
unregistriert
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Werbeanzeige