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

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

1

18.02.2013, 12:31

Datenspeicherung für RPG

Morgen,

zurzeit etwickle ich ein 2d RPG und bisher bin ich soweit, dass die Map geladen und angezeigt wird. Die Map wird in einem normalen Textdokument gespeichert(ein Char = ein tile).

Ich bin jetzt an dem Punkt, an dem die Implementierung der anderen Grafiken, Personen, Tiere usw und des Questsystems kommen soll.

Allerdings bin ich mir nicht sicher, wie ich all das speichern soll. Wäre es sinnvoll bei normalen Textdokumenten zu bleiben?!? Wenn ich zB einen Bereich der Map lade, werden also mindestens 3 Dokumente(Grundmap,Häuser usw, Personen usw) geöffnet und ausgelesen.

Ausserdem müsste dann ja immer wenn man eine Person anspricht wieder ein anderes Dokument geöffnet werden, aus dem die Quest/der Satz ausgelesen wird.

Ein Anspruch wäre noch, dass ich das Dokument auch relativ gut/schnell bearbeiten kann (Quest als fertig markieren/andere Position für Person festlegen usw).

Um meine Frage auf den Punkt zubringen, macht es Sinn, das alles in Textdokumenten zu machen, vorallem auf Geschwindigkeit und auslese komplexität gesehen und wenn nein, welche alternativen würdet ihr empfehlen?


Gruss,
ERROR

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

18.02.2013, 12:33

Einzelne Files, Prefetching oder Caching.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

3

19.02.2013, 22:52

Also wenn ich es richtig verstehe, soll ich entweder (prefetching) die Daten schon zu gewissen Zeitpunkten bevor sie akut gebraucht werden auslesen und als Beispiel die Karte für den nächsten Bereich schonmal vorladen.

Oder(caching) die Textdokumente in den RAM Laden, aber erst bei Bedarf auslesen?


Für den Fall, dass ich die beiden Methoden richtig verstanden habe, welche wäre denn für welchen Fall besser? Falls ich es falsch verstanden habe, bitte einmal genauer erklären ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

20.02.2013, 06:45

Caching klingt nach deiner Erklärung nach dem selben Verfahren wie Prefetching. Das stimmt so nicht ganz. Während Prefetching die Daten nämlich schon lädt, wenn man sie noch gar nicht braucht und diese dann dort hält, lädt Caching sie erst dann, wenn darauf zugegriffen werden soll und behält sie dann im Speicher.

Je nach Anwendungszweck ist das eine oder das andere sinnvoller. Wenn Du z.B. 15.000 HTML-Files für Deine Quest-Dialoge hast (wie wir damals), dann willst Du die nicht alle auf einmal laden, sondern arbeitest mit Caching. Kann natürlich mal kurz dauern, wenn ein File dann tatsächlich geladen wird. Hast Du aber nur 200 Files, dann lohnt sich eventuell Prefetching. Beides hat Vor- und Nachteile. Prefetching hat eine lange Anfangsladezeit, Caching halt mittendrin immer mal wieder kurze Ladezeiten. Du kannst natürlich auch eine Kombination aus beidem machen: Im Hintergrund mit niedriger Priorität anfangen zu prefetchen und wenn etwas gebraucht wird, was noch nicht da ist, gleich on the fly laden und cachen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

20.02.2013, 07:04

ich würde es in eier solchen Situation bevorzugen, wenn noch vor der tatsächlichen Notwendigkeit das geladen wird, was als nächstes benötigt wird, wofür man wiederum wissen muss, was als nächstes benötigt werden könnte. Der Unterschied zum "normalen" Prefetching ist in gewisser Weise die Priorisierung bzw. je nach Umsetzung die Eienschaft, dass weniger geladen wird (nicht alles, sondern nur das demnächst notwendige). Bei Maps könnte das der Fall sein und dadurch auch bei allem, was eine gewisse Ortsbindung hat.
Allerdings muss es ja nicht heißen, dass das ein guter Ansatz ist, nur weil ich ihn wählen würde... ^^
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

20.02.2013, 07:08

Nö, das macht oft schon durchaus Sinn und wird in einigen Spielen ziemlich sicher auch so gemacht. Hässlich wird's dann dabei, wenn ein Spieler von Stadt zu Stadt reist und die Engine anfängt für jede Stadt alles zu laden, was aber dann gar nicht gebraucht wird. Da muss man entweder einen Abbruch vorsehen oder neu priorisieren. Ist dann kein ganz trivialer Ansatz mehr, aber Daten performant und sinnvoll zu laden ist fast nie ein triviales Thema, wie Spieleentwicklung oft allgemein auch nicht. (jedenfalls im Vergleich zu der meisten Anwendungsentwicklung finde ich Spiele meist deutlich mehr tricky)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

20.02.2013, 08:16

Das sollte eher eine Art Schutz sein, sollte ich mal wieder vollkommenen Unsinn geschrieben haben, dass nicht gleich auf mich eingeprügelt wird. ;)

Aber mal Spaß bei Seite:
Die Situation, die du beschreiben hast, ist durchaus unpraktisch, allerdings kommt es auf das Game Design an, ob eine solche Situation auftreten kann. In meinem Action Adventure beispielsweise wird dies nicht der Fall sein, in anderen Spielen wäre es aber durchaus denkbar. Wenn man ein solch freies Herumreisen zwischen den Gebieten hat, dann könnte man überlegen, ob man dafür das Prefetching deaktiviert, sofern es andernfalls überhaupt greifen würde. Es wäre dann immernoch denkbar, dass die Teilgebiete einer Stadt per Prefetching geladen werden.
Was ein Teilgebiet im konkreten Fall ist, kann wieder unterschiedlich sein. In meinem Action Adventure wäre eine Map der kleinstmögliche ladbare Teil. In anderen Spielen sind die Maps häufig in Chunks unterteilt, da die Verwaltung aufgrund ihrer Größe sonst geradezu unschaffbar werden würde. Da wären dann die Chunks die kleinstmöglichen Teile, die man Prefetchen könnte. Auf die anderen bereisbaren Städte übertragen: man könnte von diesen vorerst nur die beim Betreten erforderlichen Chunks prefetchen und die restlichen sobald es dann tatsächlich erforderlich ist (wenn der Spieler diese Map betritt).

Was eine bessere Herangehensweise ist kommt sehr stark auf den Einzelfall an und es lässt sich keine allgemeingültige Lösung benennen.

Und nicht nur du findest die Spieleetnwicklung schwerer als die Anwendungsentwicklung. ;)


@ERROR:
Als ich mein Action Adventure noch in Python hatte, waren alle Dateien Textdateien und jetzt mit C# habe ich immernoch das gleiche Format für die Rohdaten. Da ich XNA verwende, nutze ich natürlich auch die Kompilierung des Ressourcen und generiere mir *.xnb-Dateien, allerdings hätte ich mit einem anderen Framework wohl immernoch das gleiche Format auch zur Laufzeit des Spiels.
Ich würde dir also empfehlen, bei Textdokumenten zu bleiben bis das Codegerüst wirklich fertig ist und in diesem höchsten Bugs zu besitigen sind. Dann kannst du dir nochmal Gedanken machen, ein anderes Format zu nehmen, zumal du dann wahrscheinlich erst mit Sicherheit alle Daten kennst, die gespeichert werden müssen und wie sie im Spiel dann später benötigt werden.
Textdateien haben übrigens, bedingt durch ihre bessere Editierbarkeit, den Vorteil, dass Konflikte in einem Versionsverwaltungssystem besser bereinigt werden können, allerdings wird das erst dann relevant, wenn mehr als 1 Person mittels Versionsverwaltung an dem Spiel arbeitet.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

8

20.02.2013, 09:22

Danke euch beiden, jetzt habe ich verstanden wie ihr es meint ;).


Werde dann wohl direkt von Anfang an eine gesunde Mischung aus beiden machen.

Zu den Textdokumenten, ich denke mal du hast Recht und werde wohl auch weiter bei txt files bleiben.


Danke nochmal und ich denke meine Fragen sind damit geklärt :thumbup:

Werbeanzeige