Du bist nicht angemeldet.

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

1

26.03.2014, 12:21

Arbeiten mit multiplen Objekten

Hallo zusammen

Ich habe eine Frage hinsichtlich dem Arbeiten mit vielen Objekten.
Ich arbeite aktuell mit dem Buch "SDL Game Development von Shaun Mitchell" und bin damit sehr zufrieden.
Objekte sowie Texturen der verschiedenen Spiel-Zustände (Menü, Spiel, GameOver etc.) lade ich alle mit TinyXML und einer entsprechenden XML Datei.

Bis jetzt bin ich so weit:

Game.mov

Wie macht ihr das nun wenn ihr multiple Blöcke haben wollt? Sollte man dann irgend ein Array [x][y] mit Objekten aufziehen? Dies würde aber irgendwie mit einer XML-Datei nicht mehr gehen. Oder muss ich z.B. 30 Objekte (= 30 Blöcke) in die XML Datei laden? Das wird dann alles etwas kompliziert mit CollisionDetection, da jedes Objekt im Pointer

C-/C++-Quelltext

1
m_gameObjects
separat angesteuert werden muss? Whs. müsste irgend ein Loop hier rein aber ich sehe gerade nicht wie dies zu bewerkstelligen ist:

C-/C++-Quelltext

1
2
3
4
5
    if (checkCollision(dynamic_cast<SDLGameObject*>(m_gameObjects[1]), dynamic_cast<SDLGameObject*>(m_gameObjects[2])))
    {
        m_gameObjects[1]->collision();
        g_pTextureManager->clearFromTextureMap(m_textureIDList[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
23
24
25
26
27
28
29
30
bool PlayState::checkCollision(SDLGameObject *p1, SDLGameObject *p2)
{
    int leftA, leftB;
    int rightA, rightB;
    int topA, topB;
    int bottomA, bottomB;
    
      // Berechne Seiten des Rect A
    
    leftA = p1->getPosition().getX();
    rightA = p1->getPosition().getX() + p1->getWidth();
    topA = p1->getPosition().getY();
    bottomA = p1->getPosition().getY() + p1->getHeight();
    
    // Berechne Seiten des Rect B
    
    leftB = p2->getPosition().getX();
    rightB = p2->getPosition().getX() + p2->getWidth();
    topB = p2->getPosition().getY();
    bottomB = p2->getPosition().getY() + p2->getHeight();
    
    // Wenn irgendeiner der Seiten von A outside von B
    
    if (bottomA <= topB) { return false; }
    if (topA >= bottomB) { return false; }
    if (rightA <= leftB) { return false; }
    if (leftA >= rightB) { return false; }
    
    return true;
}


Ich wäre um Ansätze sehr froh.

Eric

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »KPEric« (26.03.2014, 12:41)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

26.03.2014, 16:30

Um was geht es dir genau? Was hast du genau vor, bzw was ist dein eigentliches Ziel? Möchtest du eine TileMap machen? Oder hast du deine Welt schon dargestellt und möchtest nun einzelne Objekte darin platzieren? Wenn ja, was sind das für Objekte? Du sagst, der Spieler kann damit kollidieren, kann er aber noch mehr damit anstellen? Wie du das ganze hinterher speicherst ist davon ja erst mal unabhängig. Über dein Speicherformat können wir uns danach gerne Gedanken machen. Erzähl doch mal genau was du da grad vor hast.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

03.04.2014, 11:28

Danke für deine Antwort Schorsch. Das Problem hat sich mittlerweile erledigt.

Werbeanzeige