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 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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
#ifndef FIRESHOT_HPP #define FIRESHOT_HPP #include "Player.hpp" #include "Sprite.hpp" #include "Framework.hpp" #include "timer.hpp" class CFireShot { public: CFireShot (); void Update (CPlayer Player); int ReturnXLeft (); int ReturnXRight (); int ReturnYDown (); int ReturnYUP (); void ShotReturn (); void Render (CPlayer Player); private: float m_fAreaDown; float m_fAreaUp; float m_fAreaLeft; float m_fAreaRight; bool m_bShotON; bool m_bShotInit; int m_ShotDirection; int m_Status; float m_fMaxmovement; CSprite *m_FireGrafic; int m_Rendermodus; float m_fRendetime; }; #endif //Ubdate // //Aufgabe: Schuß Ubdaten // void CFireShot::Update(CPlayer Player) { if (Player.ShotReturn() == true) { if( m_bShotInit == false) { //Abfrage nach Blickrichtung if(Player.FaceDirectionRueckgabe() == 1) { //Schuß nach Links ist an m_ShotDirection = 1; //Startposition an Spieler anpassen m_fAreaLeft = Player.AreaLeftRueckgabe(); m_fAreaUp = Player.AreaUPRueckgabe()+15; } else { //Schuß nach Rechts ist an m_ShotDirection = 2; //Startposition an Spieler anpassen m_fAreaLeft = Player.AreaRightRueckgabe(); m_fAreaUp = Player.AreaUPRueckgabe()+15; } m_bShotInit = true; m_bShotON = true; m_Status = 1; m_FireGrafic->Load_MoveObject("Data\Grafics\Player\Fire.bmp", 16, 16); } //Abfragen ob Schußbewegung ihr Ende ereicht if (m_fMaxmovement >= 400) { //Schußendsequenz ist on m_Status = 2; //Werte wieder zurücksetzen m_fRendetime = 0; m_Rendermodus = 0; m_FireGrafic->Load_MoveObject("Data\Grafics\Player\FireEnd.bmp", 10, 9); } //Abfrage ob der SChuß noch fliegen soll if (m_Status == 1) { //Nach Schußrichtung abfregen if(m_ShotDirection == 1) { //Bewegungen ubdaten //Pixelbewegung speichern m_fMaxmovement += 400 * g_pTimer->GetElapsed (); m_fAreaLeft += 400 * g_pTimer->GetElapsed (); m_fAreaRight = m_fAreaLeft + 10; m_fAreaDown += 150 * g_pTimer->GetElapsed (); m_fAreaUp = m_fAreaDown-9; } else { //Pixelbewegung speichern m_fMaxmovement += 400 * g_pTimer->GetElapsed (); //Bewegungen ubdaten m_fAreaLeft -= 400 * g_pTimer->GetElapsed (); m_fAreaRight = m_fAreaLeft + 10; m_fAreaDown += 150 * g_pTimer->GetElapsed (); m_fAreaUp = m_fAreaDown-9; } //Renderzeit erhöhen damit andere Renderteile aufgerufen werden m_fRendetime += 1 * g_pTimer->GetElapsed (); //Abfrage nach der Renderzeit und entsprechendes Bild Rendern if (m_fRendetime < 0.2) { m_Rendermodus = 0; } else if (m_fRendetime >= 0.2) { m_Rendermodus = 1; } else if(m_fRendetime < 0.4) { m_Rendermodus = 2; m_fRendetime = 0; } } //Wenn nicht Schuß neigt sich dem Ende zu Rauchanimation else { m_fRendetime += 1 * g_pTimer->GetElapsed (); if (m_fRendetime < 0.2) { m_Rendermodus = 0; } else if (m_fRendetime >= 0.2) { m_Rendermodus = 1; } else if(m_fRendetime < 0.4) { m_fRendetime = 0; m_bShotInit = false; m_bShotON = false; //Schuß ist wieder erlaubt Player.ShotAnpassen(); } } } } |
Administrator
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
// Render_MoveObject // // Aufgabe: Rendern eines bewegten Objekts und Abfragen ob und wo er gerendert werden soll ------> Es werden nur einzeilige Animationslisten unterstützt!!! // void CSprite::Render_MoveObject (float fFrameNumber, int XScreenMin, int XScreenMax, int YScreenMin, int YScreenMax, int X1, int Y1 ) { //Momentanes Animationsbild ansteuern m_FrameRect.x = fFrameNumber * m_FrameWidth; m_FrameRect.y = 0; //Hoehe bestimmen int PlayerXScreenMin = XScreenMin; // Linkes Bildschirmende int PlayerXScreenMax = XScreenMax; // Rechtes Bildschirmende int PlayerYScreenMin = YScreenMin; //Oberes Bildschirmende int PlayerYScreenMax = YScreenMax; //Unteres Bildschirmende int EnemyXLeft = X1; // Linker X Wert des Gegner Bildes int EnemyXRight = X1 + m_FrameWidth; // Rechter X Wert des Gegner Bildes int EnemyYDown = Y1; //Unterer Y Wert des Bildes int EnemyYUp = Y1 - m_FrameHeight; //Oberer Y Wert des Bildes ; //Abfrage ob sich Gegner im Y Bereich des Spielers befindet if (PlayerYScreenMax > EnemyYUp && PlayerYScreenMin < EnemyYDown) { //Wenn ja -> Abfrage ob oben nur ein Teil im Y Bereich ist if (PlayerYScreenMin > EnemyYUp) { //Position ab dem der Animationsteil beginnt erhöhen m_FrameRect.y = PlayerYScreenMin-EnemyYUp; //Animationsteil kleiner machen m_FrameRect.h = EnemyYDown - PlayerYScreenMin; //Bild soll ganz oben angezeigt werden m_Rect.y = 0; //Speichern das Gegner im Y Bereich des Screens ist m_bYArea = true; } //Wenn nein -> Abfrage ob unten nur ein Teil im Y Bereich ist else if (PlayerYScreenMax < EnemyYDown) { //Animationsteil kleiner machen m_FrameRect.h = PlayerYScreenMax - EnemyYUp; //Bestimmen wo das BIld zu sehen sein soll m_Rect.y = EnemyYUp - PlayerYScreenMin; //Speichern das Gegner im Y Bereich des Screens ist m_bYArea = true; } //Wenn nein -> Gegner ist ganz im Y Bereich else { //Stelle bestimmen, wo das Bild gerendert wird m_Rect.y = EnemyYUp-PlayerYScreenMin; //Hoehe des Animationsbildes m_FrameRect.h = EnemyYDown-EnemyYUp; //Speichern das Gegner im Y Bereich des Screens ist m_bYArea = true; } } //cout << "Gegner Links Koordinate: " << EnemyXLeft << " Gegner Rechts Koordinate: " << EnemyXRight << endl; //cout << "Player Min Screen: " << PlayerScreenMin << " Player Max Screen: " << PlayerScreenMax << endl; //Abfrage ob sich Gegner im X Bereich des Spielers befindet if (PlayerXScreenMax > EnemyXLeft && PlayerXScreenMin < EnemyXRight) { //Wenn ja -> Abfrage ob links nur ein Teil im X Bereich ist if (PlayerXScreenMin > EnemyXLeft) { //Position ab dem der Animationsteil beginnt erhöhen m_FrameRect.x += PlayerXScreenMin - EnemyXLeft; //Und Animationsteil kleiner machen m_FrameRect.w = EnemyXRight - PlayerXScreenMin; //Bild wird links angezeigt m_Rect.x = 0; //Speichern das Gegner im X Bereich des Screens ist m_bXArea = true; } //Wenn Nein -> Fragen ob es evtl. Rechts nur zum Teil im X Bereich ist else if (PlayerXScreenMax < EnemyXRight) { //Bestimt wo das Bild rechts gerendert werden soll m_Rect.x = EnemyXLeft - PlayerXScreenMin; //Bestimt die Breite die gerednert wird m_FrameRect.w = PlayerXScreenMax - EnemyXLeft; //Speichern das Gegner im X Bereich des Screens ist m_bXArea = true; } //Wenn Nein -> Gegner ist "ganz" im X Bereich des Spielers else { //Position wo das Bild angezeigt wird m_Rect.x = EnemyXLeft-PlayerXScreenMin; //Maximale Breite wird angezeigt, da Bild ganz zu sehen ist m_FrameRect.w = EnemyXRight - EnemyXLeft; //Speichern das Gegner im X Bereich des Screens ist m_bXArea = true; } } // Ausschnitt rendern wenn er sich im X und Y Bereich des Spielers befindet "also im Sichtbereich" if (m_bXArea == true && m_bYArea == true) { SDL_BlitSurface (m_pImage, &m_FrameRect, m_pScreen, &m_Rect); m_bXArea = false; m_bYArea = false; } } // Load // // Aufgabe: Animiertes Sprite laden // void CSprite::Load_MoveObject (const string sFilename, int FrameWidth, int FrameHeight) { // Bitmap laden Load (sFilename); // Rect für Animationsphase initialisieren m_FrameWidth = FrameWidth; m_FrameHeight = FrameHeight; m_FrameRect.w = FrameWidth; m_FrameRect.h = FrameHeight; } // Load |
Zitat
Quellcode
1 Load(xyz)
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 |
// Load // // Aufgabe: Einfaches, nicht animiertes Sprite laden // 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); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
// Destruktor // // Aufgabe: Surface des Sprites freigeben // CSprite::~CSprite () { // Surface freigeben SDL_FreeSurface (m_pImage); } // Destruktor |
C-/C++-Quelltext |
|
1 |
void Update (CPlayer Player);
|
C-/C++-Quelltext |
|
1 |
void Update (CPlayer const & Player); |
Werbeanzeige