Tja nu geht es halt auch mal wieder daran. Das letzte Mal habe ich das per XML gemacht und es ging recht gut. Dennoch wollte ich mal an dieser Stelle fragen:
Was nehmt ihr, um Level zu speichern und warum?
Nutzt ihr .dat, .xml, was anderes, eigene Formate?
Also Xml war eindeutig der Vorteil, dass es recht einfach zu bedienen war und die Baumstruktur sehr uebersichtlich ist.
Vorteil und Nachteil ist die Veraenderungsmöglichkeit
Nachteile sind langsamer Zugriff und Speicherintensivitaet.
Aber nu lasst mal Eures Hören, will jetz nicht mit etwas anfangen, was am ende eh unsinnig ist, weil ich es dann doch aender.
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Für dich XML für alle anderen Binärformat. Schreib dir einen Konverter für XML->Binärformat, sollte ja nicht so der Aufwand sein und dann schreib dir noch einen Loader für das Binärformat, so dass du nach belieben zwischen XML und Binär wechseln kannst.
Ich habe nicht die leiseste Ahnung, wie sowas geht. Habe bei Google http://www.stylusstudio.com/binary_xml.html# gefunden, aber weiss nich, ob es das ist. Wenn ja verstehe ich die Methode nicht.
gibs dazu evtl nen Tut?
Ich würde sagen das hängt ganz vom leveltyp ab. Bei einem level das ein 2D array von wenigen byte großen einträgen ist, würde ich eher zu binär tendieren. Bei einem Level das aus Objekten aufgebaut ist, eher zu xml. Bei großen Leveln die du mit xml speichern willst, solltest du wie schon gesagt am besten einen xml->bin konverter schreiben.
XML-Parser gibt es einige, kannst ja mal auf torry.net schaun
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Ich meine dass du das "manuell" machen kannst. Für jedes XML-File kannst du ein gleichwertiges Binär-Format finden. Und für jedes Binär-Format kannst du ein zumindest gleichwertiges XML-File erstellen.
Hin und wieder hast du eine sehr sehr einfache Schnittstelle, wo du einfach einfach einen Namen (oder Filenamen) angibst und dieses Level möchtest du laden. Also in der Art:
Code:
class LevelLoader
{
public:
Level *GetLevel( char *Name );
};
Wenn dem so ist, dann überschreibst du in einem Binärfile-LevelLoader die eine Funktion, oder prüfst sogar in dieser Funktion ob der Filename mit .xml oder anders endet.
Wenn du eine klein wenig komplexere API hast, also angefangen mit mehreren Elementen im selben File welche über Namen identifiziert werden, dann musst du halt dein Binär-Format auch entsprechend anpassen. Ein gängigeres Beispiel dürfte hier User Interface sein, wo du mehrere UI-Elemente in ein und demselben File gespeichert haben kannst. Hier hast du dann zB so eine API:
Code:
class UILoader
{
public:
void OpenFile( char *Filename );
UIElem *GetUIElem( char *ID );
};
Hier könntest du im UI-Daten-File die einzelnen UIElemente als Array (oder indizierte Liste oder wie auch immer) abspeichern. Damit du sie dann immer noch über einen String als ID identifizieren kannst legst du dir halt noch ein 2tes File an wo du die Zuordnung von String zu ID abspeicherst, entweder direkt als Hashtable oder als Liste oder so.
Je komplexer deine Schnittstelle sein soll, desto komplexer wird natürlich auch die Umwandlung von XML->Binär und auch umgekehrt (wobei umgekehrt noch weniger schlimm wenn es nicht allzu benutzerfreundlich sein muss).
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.