Hallo zusammen,
ich bin relativ neu hier im Forum und habe gerade erst meine ersten Gehversuche
mit Irrlicht gemacht. Ich habe allerdings schon einige Erfahrungen mit Python, C++, (und wx),
Java und der A6-Engine gemacht und möchte nun ein Spiel mit Irrlicht in C++ programmieren.
Ich habe mir nun, nachdem ich einige Tests mit Irrlicht gemacht habe und mich etwas über
OpenAl und ODE schlau gemacht habe, einige Vorüberlegungen zur Struktur gemacht.
Ich habe mir vorgestellt, das Spiel modular über verschiedene Manager aufzubauen, so dass
es einen Gamemanager gibt, der das gesamte Spiel steuert und andere Manager für Entities
usw. benutzt, um den Spielfluss zu regeln.
Meine Frage ist jetzt, ob der Ansatz so sinnvoll ist,
oder ob sich da ein erfahrener Entwickler die Haare rauft. Gibt es Dinge, die geändert werden sollten,
oder gibt es bessere Methoden? Ich habe hier einmal die wesentlichen
Eigenschaften zusammengefasst (einiges ist auch schon implementiert):
GameManager- fängt Events ab und bietet anderen Managern eine Schnittstelle,
um diese Abzufragen (z.B. isKeyDown(TASTE_SPRINGEN)) - steuert GameStates (STATE_MAIN_MENU, STATE_GAME usw.)
- hat eine Methode MainLoop, welche die Hauptschleife beinhaltet,
die Hauptschleife ruft dabei verschiedene Funktionen wie
"smgr->drawAll" oder "physicsmanager->doPhysics" auf
SoundManager- nutzt OpenAl
- hat eine eigene virtuelle Welt
- spielt 3D-Sounds, die permanent abgespielt werden, wie z.B.
das Rauschen eines Wasserfalls - spielt 3D-Sounds, die einmalig abgespielt werden, wie z.B.
den Schuss eines Gegners - spielt nicht-räumliche Sounds, wie z.B. Hintergrundmusik
oder im Menü beim Klick auf einen Button
PhysicsManager- nutzt ODE
- hat eine eigene virtuelle Welt
- führt eine Liste mit Körpern (Gegenstücke zu den Meshes
im SceneManager von Irrlicht) - hat eine Methode "doPhysics", die einen Berechnungsschritt
für die Physikwelt macht und in der Hauptschleife aufgerufen wird
EntityManager- Entities
- laden
- verändern
- löschen - Entities werden beim Laden in SceneManager, PhysicsManager
und ggf. SoundManager (falls ein permanenter 3D-Sound abgespielt werden soll)
eingefügt
LevelManager- liest Dateien, in denen Entities mit Position, Mesh, Eigenschaften, Skript usw.
gespeichert sind. - die Entities werden mittels des EntityManagers geladen
Und dann noch eine Frage zur Verwendung von ODE:
ist es sinnvoll, die Kollisionserkennung komplett von ODE berechnen zu lassen,
ohne Irrlicht damit zu konfrontieren?
Und ist es dann besser, in jedem Hauptschleifendurchlauf durch die Liste
mit Entities zu iterieren und die Positionen aktualisieren,
oder lieber eigene SceneNodes schreiben, die sich automatisch mit ihrer
ODE-Position synchronisieren?
Ich wäre sehr dankbar für Hinweise und Vorschläge