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
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 |
#ifndef LEBENSANZEIGE_HPP #define LEBENSANZEIGE_HPP #include "Sprite.hpp" #include "Player.hpp" class CLebensanzeige { public: void Init (); void Update (); void Render (); void Quit (); private: CSprite *m_pSpriteLebensanzeige;// Zeiger auf Lebensanzeige-Sprite CPlayer *m_pPlayer; //Zeiger auf die Player-Instanz float m_fXPos; // X-Position der Lebensanzeige float m_fYPos; // Y-Position der Lebensanzeige float m_fAnimPhase; // Akt. Animationsphase der Lebensanzeige }; #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 |
#include "Lebensanzeige.hpp" // Init // // Aufgabe: Lebensanzeige initialisieren // void CLebensanzeige::Init() { // Lebensanzeigesprite erstellen m_pSpriteLebensanzeige = new CSprite; m_pSpriteLebensanzeige->Load ("Data/Lebensanzeige.bmp", 3, 194, 31); m_pSpriteLebensanzeige->SetColorKey (255, 0, 255); m_fAnimPhase = 2.0f; } // Init // Update // // Aufgabe: Lebensanzeige auf dem Laufenden halten // void CLebensanzeige::Update() { if(m_pPlayer->m_Leben == 2) //Hier liegt mein Problem sobald ich die if Funktion einbinde funktioniert das Spiel nicht mehr m_fAnimPhase = 2.0f; } // Update // Render // // Aufgabe: Lebensanzeige rendern // void CLebensanzeige::Render() { m_pSpriteLebensanzeige->SetPos (5, 5); m_pSpriteLebensanzeige->Render (m_fAnimPhase); } // Render void CLebensanzeige::Quit() { // Lebensanzeige-Sprite freigeben if (m_pSpriteLebensanzeige != NULL) { delete (m_pSpriteLebensanzeige); m_pSpriteLebensanzeige = NULL; } } // Quit |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
//In Public der hpp der Klasse CPlayer int m_Leben; // Leben des Spielers //In Init der cpp der Klasse CPlayer void CPlayer::Init () { //Leben festlegen m_Leben = 2; } |
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 |
#ifndef LEBENSANZEIGE_HPP #define LEBENSANZEIGE_HPP #include "Sprite.hpp" #include "Player.hpp" class CLebensanzeige { public: CLebensanzeige(); ~CLebensanzeige(); void Render (float m_fAnimPhase); private: CSprite *m_pSpriteLebensanzeige;// Zeiger auf Lebensanzeige-Sprite float m_fXPos; // X-Position der Lebensanzeige float m_fYPos; // Y-Position der Lebensanzeige float m_fAnimPhase; // Akt. Animationsphase der Lebensanzeige }; #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 |
#include "Lebensanzeige.hpp" // Init // // Aufgabe: Lebensanzeige initialisieren // CLebensanzeige::CLebensanzeige() { // Lebensanzeigesprite erstellen m_pSpriteLebensanzeige = new CSprite; m_pSpriteLebensanzeige->Load ("Data/Lebensanzeige.bmp", 3, 194, 31); m_pSpriteLebensanzeige->SetColorKey (255, 0, 255); m_fAnimPhase = 2.0f; } // Init // Render // // Aufgabe: Lebensanzeige rendern // void CLebensanzeige::Render(float m_fAnimPhase) { m_pSpriteLebensanzeige->SetPos (5, 5); m_pSpriteLebensanzeige->Render (m_fAnimPhase); } // Render CLebensanzeige::~CLebensanzeige() { // Lebensanzeige-Sprite freigeben if (m_pSpriteLebensanzeige != NULL) { delete (m_pSpriteLebensanzeige); m_pSpriteLebensanzeige = NULL; } } // Quit |
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 |
class CPlayer { public: float LebenAbfragen (); void LebenRedu (); private: float m_Leben; // Leben des Spielers }//Abgekürtzt void CPlayer::Init () { //Leben festlegen m_Leben = 2.0f; } // Init //Leben reduzieren void CPlayer::LebenRedu() { m_Leben--; if(m_Leben < 0) m_Leben = 0.0f; } //Leben abfragen float CPlayer::LebenAbfragen() { float Temp; Temp = m_Leben; return(Temp); } |
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
class CGame { private: CLebensanzeige *m_pLebensanzeige;//Lebensanzeige-Instanz float m_Leben; //Leben des Spielers } void CGame::Init () { // Lebensleiste initialisieren m_pLebensanzeige = new CLebensanzeige; m_Leben = m_pPlayer->LebenAbfragen(); } // Init void CGame::Quit () { // Lebensanzeige freigeben if (m_pLebensanzeige != NULL) { delete (m_pLebensanzeige); m_pLebensanzeige = NULL ; } } // Quit void CGame::Run () { // Hauptschleife des Spiels durchlaufen // while (m_bGameRun == true) { // Events bearbeiten ProcessEvents (); // Framework updaten und Buffer löschen g_pFramework->Update (); g_pFramework->Clear (); // Hintergrundbild rendern m_pSpriteBackground->Render (); // Spieler updaten und rendern m_pPlayer->Update (); m_pPlayer->Render (); //Lebensanzeige rendern m_pLebensanzeige->Render(m_Leben); // Neue Asteroiden hinzufügen SpawnAsteroids (); // Kollisionen prüfen CheckCollisions (); // Asteroiden rendern RenderAsteroids (); // Buffer flippen g_pFramework->Flip (); } } // Run void CGame::CheckCollisions () { // Kollision zwischen Spieler und Asteroid if (RectPlayer.y < RectAsteroid.y + RectAsteroid.h && RectPlayer.y + RectPlayer.h > RectAsteroid.y && RectPlayer.x < RectAsteroid.x + RectAsteroid.w && RectPlayer.x + 64 > RectAsteroid.x) { // Ja, also gab es eine Kollision. //Asteroid löschen, Spieler Leben abziehen ItAsteroid->SetAlive (false); m_pPlayer->LebenRedu(); m_Leben = m_pPlayer->LebenAbfragen(); } }// CheckCollision |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Chris13« (15.03.2011, 23:38)
Zitat
Mach einfach Init und Quit weg und mach das statt dessen in den Konstruktor + Destruktor, die sind ja eigentlich dafür da.
Zitat
RectPlayer.x + 64 > RectAsteroid.x
Zitat
m_pSpriteLebensanzeige = new CSprite;
m_pSpriteLebensanzeige->Load ("Data/Lebensanzeige.bmp", 3, 194, 31);
m_pSpriteLebensanzeige->SetColorKey (255, 0, 255)
Zitat
float Temp;
Temp = m_Leben;
return(Temp);
C-/C++-Quelltext |
|
1 2 3 |
float Temp; Temp = m_Leben; return(Temp); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void CSprite::Load (const string sFilename) { // Bitmap laden m_pImage = SDL_LoadBMP (sFilename.c_str () ); // Prüfen, ob alles glatt ging if (m_pImage == NULL) { cout << "Fehler beim Laden von: " << sFilename.c_str (); cout << endl; cout << "Fehlermeldung: " << SDL_GetError () << endl; // Framework herunterfahren g_pFramework->Quit (); // Gesamtes Spiel beenden exit (1); } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Chris13« (16.03.2011, 12:53)
Werbeanzeige