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 |
// ****** Check Collisions (Kollisionen überprüfen und entsprechender Wert zurückgeben) ****** // // Iteratoren für den Enemy holen list<CEnemies>::iterator ItEnemy = EnemyListDown.begin(); // Rects für die Enemies und den Player erzeugen SDL_Rect RectEnemy; SDL_Rect RectPlayer; // Alle Enemies durchlaufen while (ItEnemy != EnemyListDown.end()) { // Rects für die Enemies und den Player holen RectEnemy = ItEnemy->GetRect(); RectPlayer = pPlayer->GetRect(); // Kollisionserkennung für alle Enemies durchführen if (RectPlayer.x + RectPlayer.w > RectEnemy.x && RectPlayer.x < RectEnemy.x + RectEnemy.w && RectPlayer.y + RectPlayer.h > RectEnemy.y && RectPlayer.y < RectEnemy.y + RectEnemy.h) { // Es gab eine Kollision cout << "\a"; // Enemy deaktivieren ItEnemy->SetAlive(false); } // Enemy löschen falls deaktiviert if (ItEnemy->IsAlive()) ItEnemy++; else ItEnemy = EnemyListDown.erase(ItEnemy); } |
Alter Hase
Zitat
Quellcode
1 2 3 4 5 // Kollisionserkennung für alle Enemies durchführen if (RectPlayer.x + RectPlayer.w > RectEnemy.x && RectPlayer.x < RectEnemy.x - RectEnemy.w && RectPlayer.y + RectPlayer.h > RectEnemy.y && RectPlayer.y < RectEnemy.y - RectEnemy.h)
Zitat von »"Genion"«
Was darf man sich unter kollidieren nicht richtig vorstellen?
C-/C++-Quelltext |
|
1 2 |
RectPlayer.x == RectEnemy.x && Rectplayer.y + RectPlayer.h > RectEnemy.y + RectEnemy.h |
Alter Hase
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 |
// Nach einer Sekunde neue enemies von oben spawnen if (fEnemyTimer >= 2.0f) { // Es gab eine Kollision cout << EnemyListDown.size() << endl;; // Neue Enemies CEnemies EnemyDown; CEnemies EnemyLeft; CEnemies EnemyRight; CEnemies EnemyUp; // Zufällige XPos int XPos = rand()%730; // Zufällige YPos int YPos = rand()%530; // Enemies initialisieren EnemyDown.Init(pEnemy, static_cast<float>(XPos), -60.0f); EnemyRight.Init(pEnemy, -60.0f , static_cast<float>(YPos)); EnemyLeft.Init(pEnemy, 860.0f , static_cast<float>(YPos)); EnemyUp.Init(pEnemy, static_cast<float>(XPos), 660.0f); // Enemies in Liste einfügen EnemyListDown.push_back(EnemyDown); EnemyListRight.push_back(EnemyRight); //EnemyListLeft.push_back(EnemyLeft); //EnemyListUp.push_back(EnemyUp); // Zeit zurücksetzen fEnemyTimer= 0.0f; } |
Zitat von »"drakon"«
Hmm. Dann mach mal nur 1/2 Objekte, dann kannst du das besser beobachten mit dem Debuger.
Aber ich sehe da nicht so wirklich, was das Problem sein sollte.. Du hast nicht zufällig irgendwo was komisches mit unsigned gemacht, oder?
Werbeanzeige