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 |
// CheckCollisions // // Aufgabe: Kollisionen zwischen Asteroiden/Feind und Schüssen prüfen // void CGame::CheckCollisions () { // Schussliste des Spielers holen list<CShot> *ShotList = m_pPlayer->GetShotList (); // Iteratoren für Asteroiden- und Schussliste list<CAsteroid>::iterator ItAsteroid = m_AsteroidList.begin (); list<CShot>::iterator ItShot; // Rects für Asteroiden und Schüsse SDL_Rect RectAsteroid; SDL_Rect RectShot; // Alle Feinde durchlaufen while ( ItAsteroid != m_AsteroidList.end () ) { // Rects holen RectAsteroid = ItAsteroid->GetRect(); RectPlayer = m_pPlayer->GetRect(); // Alle Schüsse durchlaufen for (ItShot = ShotList->begin (); ItShot != ShotList->end (); ItShot++) { // Rect des Schusses holen RectShot = ItShot->GetRect(); bool bWasCollision = WasCollision(RectAsteroid, RectShot); if(bWasCollision) { ItAsteroid->SetAlive (false); ItShot->SetAlive (false); } } // Asteroid löschen, falls deaktiviert if (ItAsteroid->IsAlive()) { ItAsteroid++; } else { ItAsteroid = m_AsteroidList.erase(ItAsteroid); } } } bool CGame::WasCollision(SDL_Rect RectObj1, SDL_Rect RectObj2) { for(int y = (RectObj1.y+RectObj1.h); y >= RectObj1.y; y--) { for(int x = (RectObj1.x+RectObj1.w); x >= RectObj1.x; x--) { // Überschneiden sich die Rects? if( RectObj2.y < y && RectObj2.x < x && RectObj2.y + RectObj2.h > y && RectObj2.x + RectObj2.w > x) { // Ja, also gab es eine Kollision. return true; } } } return false; } |
Anonymous
unregistriert
Anonymous
unregistriert
Zitat
Ich habe grade den Algorythmus gefunden den jeder für eine saubere Kollision benötigt.
:roll:Zitat
Somit ist die Sache super optimiert und die Kollision wird auf Pixelebene durchgeführt, was sehr genau ist.
Anonymous
unregistriert
Ich habe keine Lust auf so eine Diskussion. Mein erster Post war definitiv kein Geflame. Und auch der zweite ist, davon bin ich ueberzeugt, im Grunde voellig korrekt. Wenn ihr mich schon als Flamer und Kiddie beschimpfen wollt, dann zeigt mir erst mal konkret, warum! Und nur sur Information, habe ich hier niemanden persoenlich als dumm oder aehnliches beschimpft. Auch das ist nicht mein Problem, wenn ihr es so interpretieren wollt. Aber getroffene Hunde bellen ja bekanntlich. f'`8kZitat von »"raXor"«
Trozdem brauchst du nicht hier reinschneien und wie ein Kiddie hier rumflamen und andere beleidigen wie dumm sie alles sind, nur weil sie es nicht besser wissen. Also halt dein Rand und geh Spielen.
Nun das ist so nicht korrekt. Auch wenn Patricks (nix da) coding-style etwas verwegen war und seine Ansichten nicht immer unproblematisch waren, konnte man recht nützliche Informationen aus seinen Tutorials usw. ziehen (leider zum Teil nur als Anfänger brauchbar ).Zitat
okay Kritik kann ich ja ab, aber ich kenne TGGC und weiß das seine Beiträge nunmal sinnlos sowie nutzlos sind.
Er kommt aus dem C++ Forum und dort hält er sich schon für den größten.
Der letzte der das hiergetan hat, war nix da und der ist jetzt auch schon ne weile weg und geschadet hats keinem Wink
Werbeanzeige