Entwicklung einer Game Engine
Ich plane ein Computerspiel und seine Engine. Es wird eine dreidimensionale Welt mit First-Person-Ansicht geben und es wird vorerst Einzelspieler sein. Die Programmiersprache ist C ++ und verwendet OpenGL.
Datenzentrierte Entwurfsentscheidung
Meine Entwurfsentscheidung besteht darin, eine datenzentrierte Architektur zu verwenden, in der es einen globalen Ereignismanager und einen globalen Datenmanager gibt . Es gibt viele Komponenten wie Physik, Eingabe, Sound, Renderer, ai, ... Jede Komponente kann Ereignisse auslösen und abhören . Darüber hinaus kann jede Komponente Daten lesen, bearbeiten, erstellen und entfernen .
Die Frage betrifft den Datenmanager.
Gibt an, ob eine relationale Datenbank verwendet werden soll
Sollte ich eine SQL-Datenbank verwenden, z. B. SQLite oder MySQL, um die Spieldaten zu speichern? Dies enthält praktisch alle Spielinhalte wie Gegenstände, Charaktere, Inventare usw. Mit Ausnahme von Maschen und Texturen, die noch leistungsbezogener sind, werde ich sie im Gedächtnis behalten.
Ist eine SQL-Datenbank schnell genug, um sie zum Lesen und Schreiben von Spielinformationen in Echtzeit zu verwenden, beispielsweise für die Position eines sich bewegenden Charakters? Ich muss mich auch um die plattformübergreifende Kompatibilität kümmern. Welche Alternativen habe ich, abgesehen davon, dass ich alles im Gedächtnis habe?
Vorteile wären
Die Vorteile der Verwendung einer relationalen Datenbank wie MySQL wären die datenorientierte Struktur, die eine schnelle Berechnung ermöglicht. Ich würde keine Objekte zur Darstellung von Entitäten benötigen. Ich könnte leicht Daten von Objekten in der Nähe des Players abfragen, die zum Rendern benötigt werden. Und ich muss mich nicht um Daten von weit entfernten Objekten kümmern. Darüber hinaus wären keine Speicherspiele erforderlich, da der Status des gesamten Spiels in der Datenbank gespeichert ist. Last but not least wäre es relativ einfach, das Spiel zu einem Online-Spiel zu erweitern, da es bereits einen Ort gibt, an dem der Status des gesamten Spiels gespeichert ist.