Meine Frage ist, ob ich Textdateien verwenden soll, um meine Spieldaten zu speichern. Ich habe einige grundlegende Bedenken, dies zu tun:
Es gibt wirklich keine Möglichkeit, die Daten zu schützen, und daher könnte der Benutzer alles vermasseln, wenn er es berührt, und ich möchte nicht, dass das passiert.
Es ist wahrscheinlich nicht die effizienteste Art, meine Daten zu speichern (es wird eine Menge davon geben)
Ich weiß, wie man Textdateien effektiv parst / schreibt, daher waren sie für das Prototyping fantastisch. Ich möchte nur in die Zukunft blicken, um herauszufinden, wozu ich wechseln soll, damit es mich gegen Ende der Entwicklung nicht ins Gesicht schlägt.
Was soll ich verwenden, wenn ich keine Textdateien verwenden soll? Ich brauche etwas C ++ kompatibles.
quelle
Antworten:
Im Moment sind Textdateien wahrscheinlich in Ordnung, da Sie gerade erst anfangen. Ihre Frage enthält einige Bedenken, auf die ich eingehen werde.
Der Schutz der Daten ist nicht so wichtig, wie Sie wahrscheinlich denken. Wenn es sich um ein Multiplayer-Spiel handelt, werden die Daten trotzdem serverseitig gespeichert. Wenn Ihr Spiel ein Einzelspieler ist, was ist, wenn die Spieler die Daten ändern? Wenn sie etwas kaputt machen, ist es wirklich ihre Schuld und sie können es neu installieren.
Leistung ist auch etwas anderes, das wir oft nicht richtig planen. Sie sollten nicht wirklich optimieren, bis Sie tatsächlich ein Leistungsproblem messen . Ich vermute, dass Sie wahrscheinlich eine Datenmenge haben werden, die nicht so groß ist, und dass Textdateien in Ordnung sind.
Abgesehen davon ist Ihre beste Wahl, Ihre Routinen zum Speichern und Laden von Daten so gut wie möglich zu abstrahieren. Beispielsweise können Sie eine Basisklasse haben
DataWriter
und dann verschiedene Implementierungen ihrer verschiedenen Methoden bereitstellen. Ein sehr einfaches Beispiel würde so aussehen:Wenn Sie Ihr Spiel irgendwann profilieren und feststellen, dass der Leistungsengpass in der Dateischreibroutine liegt, können Sie eine andere Implementierung dieser Klasse bereitstellen (zum Beispiel, um stattdessen in eine Datenbank zu schreiben), mit minimalen Änderungen am aufrufenden Code.
quelle
Das Wort Spieldaten kann zum Beispiel viele Dinge bedeuten
Für jede Kategorie können Sie einen anderen Ansatz wählen.
Zum Beispiel könnten Sie SQLite für Lokalisierungsaufgaben, Binärdateien für Maps, Texturen, Sounds usw. verwenden.
Für Konfigurationsmaterial sollten Sie einfach zu ändernde XML-Dateien verwenden.
Wie immer lautet die richtige Antwort "es kommt darauf an".
Es gibt viele XML-Parser mit einer C ++ - Bindung und auch eine C ++ - Bindung für SQLite.
quelle
Sie können Ihre Daten als Binär-Blob speichern und die Daten erneut übertragen, wenn Sie auf diese Datei zugreifen. Dies würde beide Probleme lösen. Stellen Sie einfach sicher, dass der Serialisierungscode genau mit der Deserialisierung übereinstimmt.
Das Streamen im binären Blob ist relativ schnell und verhindert, dass der Benutzer die Daten sieht und ändert.
All dies können Sie mit den Standardbibliotheksdatenströmen erreichen.
quelle
float
Mitglieds zu einem einzelnen Objekt), werden die alten Spielstände komplett ungültig. Während der Entwicklung ist es schwierig, damit umzugehen, aber wenn Sie dazu bereit sind, dann auf jeden Fall.