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