.txt vs .bin

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • .txt vs .bin

    Joho!

    Ich bastle nun an einem Spiel, welches eine große Karte hat. Diese Karte teile ich in Chunks. Nun möchte ich diese Chunks in einer Datei speichern, allerdings scheinen sich da die Text- und die Binärdatei anzubieten, wobei ich mir bei der Binärdatei nicht ganz sicher bin. Die Hilfedatei des GameMakers erzählt über Binärdateien nur folgendes:
    In rare situations you might need to read data from binary files.

    Ist dies eine dieser seltenen Situationen? Lässt sich mit einer Binärdatei schneller arbeiten, als mit einer Textdatei? Wofür ist soeine Binärdatei nun besonders gut geeignet und wie gut kommt der GamaMaker damit zurecht?

    Freue mich schon auf Erleuchtung.


    Skotchy~
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • Meiner Meinung nach lässt es sich am besten mit Buffern arbeiten. Es ist so ziemlich das selbe wie Binärdatein, nur hat man etwas mehr Kontrolle. Das tolle an Binärdatein ist, ist das es Werte so abspeichert wie es auch im Arbeitspeicher gespeichert ist. Daraus ergeben sich vier Vorteile: Sie sind um einiges schneller, sie sind auch um einiges kleiner, wenn man sich damit auskennt sind sie auch einfacher zu handeln und man kann nichts an der Datei ändern, wenn man dessen Struktur nicht kennt. Der Vorteil bei Textdatein ist, dass man sich die Datein anschauen kann und direkt in ihr Dinge verändern kann, was aber auch wieder ein Nachteil ist. Ich bevorzuge in jedem Fall Binärdatein. Ein kleines Beispiel:
    [hide=Buffer]

    GML-Quellcode

    1. //Zum Speichern
    2. var buf = buffer_create(1, buffer_grow, 1); //Erstellt den Buffer
    3. buffer_write(buf, buffer_u16, 1) //Dateiversion
    4. buffer_write(buf, buffer_f32, leben);
    5. //Zum Speichern eines Arrays
    6. for(var ix = 0; ix < 32; ix++)
    7. for(var iy = 0; iy < 32; iy++)
    8. buffer_write(buf, buffer_u8, feld[ix, iy]);
    9. buffer_save(buf, "Dateiname.Endung");
    10. buffer_delete(buf);
    Alles anzeigen

    GML-Quellcode

    1. //Zum Laden
    2. var buf = buffer_load("Dateiname.Endung");
    3. if(buffer_read(buf, buffer_u16) >= 1)
    4. {
    5. leben = buffer_read(buf, buffer_f32);
    6. //Zum Laden eines Arrays
    7. for(var ix = 0; ix < 32; ix++)
    8. for(var iy = 0; iy < 32; iy++)
    9. feld[ix, iy] = buffer_read(buf, buffer_u8);
    10. }
    11. else
    12. show_message("Veraltete Datei!");
    13. buffer_delete(buf);
    Alles anzeigen
    [/hide]Man kann die Buffer auch während des Spiels ändern wodurch sie schneller werden. Es gibt noch zahlreiche Optionen und Anwendungen dieser Art. Am besten liest du dir die Buffers durch: docs.yoyogames.com/source/dadi…erence/buffers/index.html
  • Danke! Buffer scheinen eine ganz tolle Lösung zu sein, ich werde sie gleich ausprobieren. Allerdings verstehe ich das nicht ganz:

    Chris987 schrieb:

    Man kann die Buffer auch während des Spiels ändern wodurch sie schneller werden.

    Wie werden die Buffer den schneller, wenn man sie ändert?

    Und ich hätte noch eine Frage, da die Buffer so schnell sind: Wäre es sinnvoll einige Variablen, die beispielsweise sehr häufig in einer Schleife benutzt werden, oder sogar alle Variablen der Spiels, mit Buffern zu ersetzen? Da es verschiedene Datentypen gibt, wäre das Spiel zur Laufzeit auf jeden Fall etwas schlanker, die Geschwinfigkeit interessiert mich aber doch ein Stückchen mehr. Oder hast du das damit gemeint, als du geschrieben hast, dass es sich am besten mit Buffern arbeiten ließe?

    Vielen Dank nochmal!


    Skotchy~
    "Ich sollte schlafen gehen"

    ~Pika-Pika~