DS-Listen speichern?

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

  • Es gibt für jede ds_* Struktur eine Funktion, mit der du die Struktur in einen String umwandeln kannst und eine Funktion, ums genau umgekehrt zu machen - diesen String kannst du dann also in eine Datei schreiben, beim Laden wieder auslesen und daraus dann die Datenstruktur wiederherstellen.

    Danke, weißt du auch wie diese Funktion heißt?

    Edit:
    ​Ich kann ja nochmal genauer beschreiben was ich vorhabe:

    ​Also ich möchte ein Programm machen, bei dem man einen Text eingeben muss und je nach Text bekommt man eine bestimmte Antwort. Ähnlich wie bei "Cortana" etc., also bestimmte Antworten die im Falle dazugehöriger "Fragen" genannt werden. Beispiel wäre

    GML-Quellcode

    1. text = get_string("Gib den Text ein", "");
    2. ​if (ds_list_find_index(global.texte, text) != -1)
    3. {
    4. textIndex = ds_list_find_index(global.texte, text);
    5. antwort = ds_list_find_value(global.antworten, textIndex);
    6. ​show_message(antwort);
    7. }​


    ​Nun soll man in dem Programm auch selber Texte und dazugehörige Fragen hinzufügen können, also habe ich zwei Button wo ich je einen Text und eine Antwort eingeben kann, einen weiteren Button zum Bestätigen.
    Die neuen Einträge werden dann in ihre jeweiligen DS-Listen gespeichert und so einer großen Liste hinzugefügt. Das klappt alles prima, nur wenn ich das Spiel erneut starte hat zwar game_save() das Spiel gespeichert, nur die DS-Liste nicht, die ist leer. Alles was ich tun müsste wäre die DS-Liste irgendwie in einer ini zu speichern. Doch selbst wenn ich die DS-Liste in einen String umwandeln und diesen dann in einer ini speichern kann, wie soll ich den dann wieder in einer DS-Liste einfügen? Also mal angenommen ich habe drei Werte in meiner Liste "global.texte": Apfel, Banane, Mango - Wenn ich diese DS-Liste in einen String umwandle "Apfel, Banane, Mango" und diesen beim nächsten Start wieder zu einer DS-Liste hinzufüge

    GML-Quellcode

    1. ds_list_add(global.texte, gespeicherterString)
    dann habe ich doch nur eine DS-Liste von einem Wert, "Apfel, Banane, Mango". Oder erkennt GameMaker die Kommata, trennt die Werte wieder und fügt sie separat in die Liste ein? Weil wenn dies nicht der Fall ist, wovon ich ausgehe, dann müsste ich ja jeden Wert der Liste einzeln speichern, also könnte ich ja praktisch gleich auf DS-Listen verzichten und Ini-Dateien verwenden

    GML-Quellcode

    1. ini_open("SaveTexte.dat");
    2. ​if (ini_key_exists("Texte", "Text1"))
    3. {
    4. text1 = ini_read_real("Texte", "Text1", "")​
    5. ​}
    6. if (ini_key_exists("Texte", "Text2"))
    7. {
    8. text2 = ini_read_real("Texte", "Text2", "")
    9. }
    10. if (ini_key_exists("Texte", "Text3"))
    11. {
    12. text3 = ini_read_real("Texte", "Text3", "")
    13. }
    14. ...
    Alles anzeigen

    ​Da sitz ich ja Stunden am Schreiben, außerdem hab ich so ein Limit an möglichen Texten, was ich auch nicht will. Es muss doch eine andere Möglichkeit geben ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von cedisupersoccer ()

  • Dafür kann man eigentlich noch besser ds_maps benutzen ;)
    Dort ist es ähnlich wie in einer Ini, da du einfach nur key=value hast.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Rhazul schrieb:

    mit der _read funktion kannst du das ganze wieder in eine ds_list reinladen und diese dann auslesen

    So langsam gebe ich auf, ich sehe den Grund nicht warum es bei mir nicht klappt :(
    Ich stelle das Programm mal zum Download vielleicht versteht man es dann besser.
    Project1.project.gmx
    Edit: Passt auf der Download-Seite auf, da sind falsche Download-Button.
    Bei mir war der graue der richtige 8o
    Doppeledit: Hier nochmal auf Google Drive, oben mittig ist der Download-Button
    drive.google.com/file/d/0BxfQ7_6-kybjbXU5Q3REM2haSUk/view
    ...Oh ich sollte vielleicht auch den ganzen Ordner hochladen :wacko:
    drive.google.com/open?id=0BxfQ7_6-kybjMGdKT3BFdnhka0U
    Oben auf den Ordnernamen klicken und auf Herunterladen. Vielleicht findet ihr den Fehler, danke :thumbup:
    ​Nein - halt. Das scheint auch nicht zu gehen. Wie zum Deibel lad ich denn mein Projekt hoch? ?(

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von cedisupersoccer ()

  • Mit File > Export Project > *.gmz erstellst du eine gezippte Projektdatei in der alles enthalten ist.

    was klappt denn nicht an der ds_list_read funktion? Hast du dir in der Doc angesehen wie du die Funktion nutzen musst?

    GML-Quellcode

    1. list = ds_list_create();
    2. ini_open("save.ini"); //öffnet die ini oder erstellt eine gleichnamige falls sie noch nicht existiert
    3. var str = ini_read_string("Lists", "0", "");//statt Lists kann auch was anderes zB Save dastehen, das kannst du dir aussuchen wenn du mit ini_write_string den inhalt von ds_list_write abspeicherst
    4. if str != ""
    5. {
    6. ds_list_read(list, str);
    7. }
    8. ini_close();

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)