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

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

1

21.10.2006, 00:34

Eigene Dateiformate

Ich frage mich gerade in wie fern man sich das Erstellen eigener Dateiformate erleichtern kann..
Das Problem das ich bisher hatte waren Veraenderungen des Formats; Daten mussten hinzugefuergt oder veraendert werden, und schon ist der gesamte Prozess zum Einlesen der Datei fuer die Tonne.

Eine praktische Alternative sind natuerlich XLM-Dateien - die hier im Forum ja zu genuege angesprochen wurden. Da ist mir aber der Overhead zu gross und ich suche nach 'Tricks' die einem bei herkoemmlichen (binaer eingelesenen) Dateiformaten hilfreich seien koennten.
In Davids Buch werden "Chunks" und "Header" ja schon recht gut erklaert, und die erleichtern einem wirklich die Arbeit.
Jetzt die eigentliche Frage: Gibt es noch mehr solcher praktischen Handgriffe ?
"Have you tried turning it off and on again?"

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

21.10.2006, 01:11

Also ich arbeite nur mit Chunks, ist doch eigentlich fuer alle Zwecke, gerade die von dir beschriebenen, ausreichend.

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

3

21.10.2006, 09:53

xlm-dateien oder xml-dateien?

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

4

21.10.2006, 11:24

Ich nutze für meine Skriptsprache eigene Dateiformate ;)
Für deklarationen nutze ich eine Header die aber .defi(Definirion) heißt.
Und als .c/.cpp nutze ich -impl(Implementation) ;)
Sollte auch recht einfach sein =)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

5

21.10.2006, 15:09

Ok, dann werde ich mal etwas konkreter: Ich frage mich z.B. wie ich am besten Datenstrukturen speichern kann, die auf Referenzen basieren. (etwa Baeume oder Graphen)
Im Programm verwende ich Speicheradressen, in einer Datei sind die natuerlich nutzlos. (Wenn ich eine C++-Klasse in eine Datei schreibe, werden ja nur die Adressen der Pointer gespeichert, oder?) Tja, wie sollte man bei sowas vorgehen? Ich koennte mir vorstellen das man einfach die mit 'new' angeforderten Elemente "irgendwo" in die Datei schreibt und dann die interne Adresse des Lesezeigers benutzt um sie zu Referenzieren. Klingt aber ein wenig unbeholfen.

Eine weitere Ueberlegung die ich hatte war eine hierarchische Struktur fuer Chunks zu benutzen: Bestimmte Typen von Chunks koennen wieder aus untergeordneten Chunks bestehen und so weiter. Beispiel: Ein "Enemy-Chunk" beinhaltet unter anderem ein "Model-Chunk". Dieses besteht wiederrum aus einem "Vertex-Chunk" sowie einem "Index-Chunk". Ist die Idee Schwachsinn, oder durchaus zu gebrauchen?

Und, ja es heisst natuerlich XML. :)
"Have you tried turning it off and on again?"

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

6

21.10.2006, 15:17

Re: Eigene Dateiformate

Zitat von »"Chase"«


Das Problem das ich bisher hatte waren Veraenderungen des Formats; Daten mussten hinzugefuergt oder veraendert werden, und schon ist der gesamte Prozess zum Einlesen der Datei fuer die Tonne.


Wieso der ganze?

Das wichtigste ist dass Du am Anfang der datei eine Versionsnummer, "magische Zahl" oder ähnliches hast. Wenn nicht und Du auch nur eine Testversion mit Dateien an Tester rausschickst, hast Du ein Problem, da später Deine Leseroutine nicht wissen kann ob sie gerade eine alte oder neue Datei vor sich hat.

Wenn z.B. "NoVertices" bis Version 14 ein unsigned short und danach unsigned long ist, so ändert sich nur eine Stelle im Code:

C-/C++-Quelltext

1
2
3
4
  if ( Fileversion <= 14 )
    NoVertices = ReadUnsignedShort();
  else
    NoVertices = ReadUnsignedLong();


XML und Chunks sind beides Konzepte, die oft sinnvoll sind (natürlich normalerweise nicht gleichzeitig).

Noch ein kleiner Tip:
Ich habe in meiner "InitApp" Funktion Zeilen a la

C-/C++-Quelltext

1
  assert( sizeof(CVertex) == 64 );


für alle Klassen, deren Objekte in Dateien geschrieben werden. Wenn ich jetzt so eine Klasse ändere, wird sich wahrscheinlich die Grösse ändern und bei einem Debugrun erhalte ich ein assert, was mich dazu bringt die Lese/Schreibroutine darauf zu prüfen, ob ich diese ändern muss. Danach ändere ich dann die Zahl in obigem Code manuell. Dies ist extrem einfach und hilft Fehler zu vermeiden.
"Games are algorithmic entertainment."

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

7

21.10.2006, 15:28

Zitat von »"Chase"«

Ich frage mich z.B. wie ich am besten Datenstrukturen speichern kann, die auf Referenzen basieren. (etwa Baeume oder Graphen)


Ok - eine sehr sinnvolle Frage.
Ich benutze die MFC Routinen, die das für mich machen, habe also keine eigene Erfahrung. In einem neuen Projekt würde ich nicht mehr unbedingt MFC nutzen. Der MFC Source code ist bei MSVC dabei, insofern könnte man theoretisch da rein schauen, wie viel es nutzt weiss ich nicht. Da das ein allgemeines Problem ist, würde ich erwatern, dass man sich eine Antwort ergoogeln kann.



Ich könnte mir vorstellen dass man beim Speichern von Objekten denen eine Id gibt und statt pointern diese Id nutzt. bei Forwardreferenzen wird es etwas schwieriger, da musst Du nach dem Laden noch mal Adressen ändern.

Zitat

Eine weitere Ueberlegung die ich hatte war eine hierarchische Struktur fuer Chunks zu benutzen: Bestimmte Typen von Chunks koennen wieder aus untergeordneten Chunks bestehen und so weiter.


Hört sich sinnvoll an.
"Games are algorithmic entertainment."

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

8

21.10.2006, 16:25

Danke fuer die Hilfe! Die Versionskontrolle ist sicher keine schlechte Idee (solange man es nicht komplizierter macht als es ist. Profesionelle Versionskontrollen wuerden wohl weit ueber den Umfang eines ganzen Projekts meiner Groessenordnung hinausgehen ;) )

Zitat von »"Osram"«

Da das ein allgemeines Problem ist, würde ich erwarten, dass man sich eine Antwort ergoogeln kann.

Ja. Ich hab jetzt auch keine Antwort erwartet sondern wollte nur eins meiner Probleme beschreiben. Ich dachte bloss, dass es noch weitere Tricks gibt (sowas wie Chunks halt), die jeder Programmierer kennen sollte, aber scheinbar gibts keine Patentloesung beim erstellen eigener Formate.
"Have you tried turning it off and on again?"

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

9

21.10.2006, 18:14

Kannst mal nach Handles googlen, die eignen sich gut zum Speichern referenzierter Objekte, in Game Programming Gems 1 gibts nen ausführlichen Artikel darüber.

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

10

21.10.2006, 18:52

Zitat

Kannst mal nach Handles googlen, die eignen sich gut zum Speichern referenzierter Objekte, in Game Programming Gems 1 gibts nen ausführlichen Artikel darüber.

[OT:]
Die Gems Reihe scheint sowieso ein gutes Nachschlagewerk zu sein, ich ueberlege mir mal eins zu bestellen. 1 und 2 scheinen aber goesstenteils den Inhalt von "Spieleprogrammierung mit DX 9 und C++" zu beinhalten, mit welchem kann man gut daran ansetzen ?
"Have you tried turning it off and on again?"

Werbeanzeige