xml-orgien in spielen?



  • Also ich hab mir vor Ewigkeiten eine Bibliothek gebaut, die xml-Dateien parsen und speichern kann. Nix dtd, nix schema.xml und auch ansonsten seeehr einfach gehalten.

    class XMLNode {
        private:
            string name;
            string value;
        public:
            list<XMLNode *> children;
    
            list<XMLNode *> findItemsByName (string name);
            XMLNode        *find (string name);
            string          getName();
            void            setName(string name);
            string          getValue();
            void            setValue(string val);
            ...
    };
    

    Ich finde, xml ist sehr schön, wenn man sich keine Gedanken um ein extra Dateiformat machen möchte. Allerdings weiß ich nicht, ob ich nicht durch Nutzung von char* bei name und value noch einiges an Rechenzeit herausholen kann und dieses tun sollte..

    Ich hatte angefangen, für ein Spiel eine Liste von Musikstücken mit möglichen folgenden Stücken nach Kategorien sortiert in xml zu programmieren.
    Man kann mit dieser jetzt auf Befehl in eine Kathegorie (kampf, höhle, ..) schwenken und bekommt dann ein Musikstück zu hören das möglichst nahtlos an das vorhergehende ranpasst.

    Als nächstes hab ich mir überlegt, ein Spielemenü zu konfigurieren, wo jedes Programmfragment eines Spieles in der XML-Datei konfigurierbar ist (menüs, intros, das spiel, etc.)..

    Jetzt bin ich auch noch drauf gekommen, dass Objekte, die während des Spiels auftauchen bei der Generierung einfach aus XML-Dateien geladen werden...

    Da ist nun aber doch mal die Frage: ist nicht irgendwann diese xml-onanie zuviel? Ich meine, auf der einen Seite frißt es Speicher und wahrscheinlich auch etwas Rechenzeit, auf der anderen Seite hat man ja davon inzwischen ne Menge..
    Oder nicht?
    Viele rechenintensiven Sachen laufen doch heutzutage eh auf der Peripherie. (Grafikkarte, Soundkarte)
    Außerdem sind Savegames nie so einfach gewesen..

    Warum ich mich hier ausheule: Ich sitz in einem Projekt das durchaus ein wenig größer werden könnte und möchte natürlich auch, dass dieses nicht im Diamodus zu spielen ist.

    Was meint ihr dazu? Ist das nur Paranoia oder sollt ich da vielleicht doch nochmal drüber brüten?



  • DocJunioR schrieb:

    ist nicht irgendwann diese xml-onanie zuviel?

    Ja. f'`8k

    Gruß, TGGC (\-/ returns)



  • Du kannst später auch auf XDS umsteigen.
    Verhält sich wie XML, ist aber eine Binärdatei, und dadurch auch schneller.

    http://www.suddenpresence.com/xds/index.htm



  • so tell me, big T
    Woliegt da eine sinnvolle Grenze?

    Also die 3D-Modelle, Sounds, etc. bleiben natürlich binär..
    Alles andere wäre Stumpsinn.
    Aaber wenn ich ein Objekt hab in dem drin steht, welches Modell genutzt wird, welche Sounds es hat, etc. find ich das schon sinnvoll.. oder ggf. die Beschreibung meines Plots..
    Kritisch sind imho hier die Objekte, weil die werden dynamisch generiert..



  • qasdfgh schrieb:

    Du kannst später auch auf XDS umsteigen.
    Verhält sich wie XML, ist aber eine Binärdatei, und dadurch auch schneller.

    http://www.suddenpresence.com/xds/index.htm

    hmm..
    klingt ganz interssant das.. schau es mir mal genauer an



  • Seh ich das richtig, dass deine XML-Bibliothek keine Attribute unterstützt?

    Du müsstest also statt

    <?xml version="1.0" ?>
    <Config>
    <Environment os="Windows" cpu="1.5ghz" ram="512mb" />
    </Config>
    

    folgendes schreiben

    <?xml version="1.0" ?>
    <Config>
    <Environment>
    <Os>Windows</Os>
    <Cpu>1.5ghz</Cpu>
    <Ram>512mb</Ram>
    </Environment>
    </Config>
    

    ?

    Und ja ich weiß, dass das Beispiel stinkt 😃

    Und zu deiner Idee, XML ist ja eine Auszeichnungssprache, also statt tausende proprietäre Formate zu entwerfen um dein Design flexibel und Datengesteuert zu halten, ist XML die beste Wahl.
    XML um eine GUI zu designen finde ich eine super Idee und wird ja auch schon vielerorts gemacht. Auch deine Musikliste finde ich gut und wenn du darin Objekte beschreiben/zusammensetzen kannst, dann finde ich das auch passend.
    Die Alternative wäre ja nur ein anderes Format zu verwenden, da gewinnst du ja nichts wirklich.

    Wenn du bei XML bleiben willst und nicht auf das XDS umsteigen willst, dann könntest du auch einfach die XML Dateien komprimiert speichern. Geht mit den boost::iostreams kinderleicht.



  • Um mal 'ne Hausnummer zu nennen, wenn du xml Dateien hast, die in die Nähe von 1 Mb kommen, oder insgesamt über 20 Mb, dann sind es evtl. zu viel.

    Gruß, TGGC (\-/ returns)



  • ookay.. wenn ich so weit komme, überleg ich mir das nochmal ^^
    Aaaber ich glaub, insgesamt wird so viel nicht geladen..

    @ User : stimmt, unterstützt sie nicht- war ich irgendwie zu faul für ^^



  • Warum die Befürchtung, dass XML etwas langsam macht? Du benutzt doch XML hoffentlich nur, um etwas persistent auf der Platte abzulegen...
    dagegen ist dann auch nichts einzuwenden.

    Die ganze Baumstruktur solltest du zur Laufzeit nicht mehr unbedingt haben. Ich gehe eigentlich immer vom Code aus und schreibe sowas:

    struct Settings {
        string playerName;
        Size resolution;
        ...
    }
    

    Und serialisier das als XML. Ein Baum ergibt sich, wenn das struct ein struct enthält (Size). Zur Laufzeit gibt es das XML-Dokument nur beim einmaligen Laden.



  • Weil das lässig mal zehn bis fünfzig Mal so lange Zeit und Speicher braucht, wie binär.

    Gruß, TGGC (\-/ returns)[/quote]



  • Benutz doch TinyXML (kostenlos). Das nehme ich auch.
    XML an sich ist schon eine feine Sache, weil man am Anfang erst einmal drum herum kommt, einen Editor zu programmieren, da ja alles schön lesbar ist.



  • TGGC schrieb:

    Weil das lässig mal zehn bis fünfzig Mal so lange Zeit und Speicher braucht, wie binär.

    Gruß, TGGC (\-/ returns)

    [/quote]Ja, beim einmaligen Laden braucht es mehr Zeit und beim Speichern *auf der Festplatte* braucht es mehr Platz. Ich sehe das Problem nicht.


  • Mod

    Optimizer schrieb:

    TGGC schrieb:

    Weil das lässig mal zehn bis fünfzig Mal so lange Zeit und Speicher braucht, wie binär.

    Gruß, TGGC (\-/ returns)

    Ja, beim einmaligen Laden braucht es mehr Zeit und beim Speichern *auf der Festplatte* braucht es mehr Platz. Ich sehe das Problem nicht.[/quote]
    ob etwas 3s oder 30s zum laden braucht ist schon ein unterschied.

    xml sollte man als metaformat nutzen und final in der anwendung dann ein binaerformat. optimal ist dabei wenn man memorymapped arbeitet, dann kann man oft daten von mehreren hundert MB schneller laden als ein paar MB aus xml.



  • Ich seh schon, alles steht und fällt mit der Datenmenge, wobei wahrscheinlich nur Daten in XML liegen sollten, die ich nicht ständig neu laden muss..

    Da machen mir jetzt eigentlich nur meine Objektmetadaten Kopfschmerzen..
    Naja. Die liegen innerhalb meines Objekts ja auch als Datenstruktur da- da werd ich diese wohl noch um ein serialize/deserialize erweitern..



  • Bist du eigentlich mit dem Typ auf zfx verwandt oder sowas? => http://www.zfx.info/DisplayThread.php?TID=22581 f'`8k

    Gruß, TGGC (\-/ returns)



  • Nein, so krank bin selbst ich nicht 😉
    Aaaber gabs da nicht auch einen, der avis so speichern wollte?



  • Benutz doch lieber etwas wie OGDL.

    XML ist nur dazu da um Stellen in Texten zu markieren. Also nicht wirklich ideal um Daten zu ordnen.

    Aber vielleicht ist für deinen Zweck ein normaler serializer praktischer. Ich weiß nicht wie gut das Boost Zeugs da ist. Beschäftige mich gerade nur mit Elephant für Common Lisp 🙂



  • kingruedi schrieb:

    XML ist nur dazu da um Stellen in Texten zu markieren. Also nicht wirklich ideal um Daten zu ordnen.

    hmm... wozu gibts dann soap? warum xml-basierte Datenbanken?

    Zur boost: ich nutz die nicht wirklich- hab mich irgendwie noch nicht so richtig mit anfreunden können. So isses halt, wenn man hinter der Zeit lebt 😃



  • Ja, warum denn eigentlich? Sag's uns. f'`8k

    Gruß, TGGC (\-/ returns)



  • Aaalso soap gibts, weil m$ ganz frech den Giftschrank der Apache-Group geplündert hat- die haben's nämlich erfunden und gleich wieder versteckt..
    xml-basierte db? hmmm.. ich weiß auch nich alles..
    Und dass ich etwas hinter der Zeit lebe- :p nenn mich einfach sentimental 😃


Log in to reply