Variable für immer speicher

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

  • Variable für immer speicher

    Vielleicht gibt es diese Frage schon, vielleicht auch nicht( :huh: ). Also ich würde gerne eine Variable machen, die wenn man das Spiel startet, das Erste mal, eine Variable auf null setzt(nehmen wir die Varaible:global.kills). Danach wird im Spiel die Variable, sagen wir 67 erhöt. Wenn man dann das Spiel schließt, und es wieder öffnet, sollte die Variable auf 67 stehen. Zusammengefasst: Eine Variable, die beim Ersten mal starten des Spieles auf null gesetzt wird, und dann aber bei jedem weiterem start des Spieles gleich bleibt. Ich glaub das funktioniert irgendwie mit einer save funktion, aber mehr weiß ich auch nicht.

    LG Afroman
  • Frag einmfach bei starten ob die Vaiable schon existiert.
    Tut sie es, tue nichts, tut sie's nicht, setze sie auf 0.

    Oder im Klartext:

    GML-Quellcode

    1. if (!variable_global_exists(kills))
    2. global.kills = 0;
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Hmm, scheint sich um Serialisierung zu drehen. Hab sowas noch nicht für beliebige Datentypen im GM gesehen.

    Kurzum ne Möglichkeit wäre: Ne Map, die kannste serialisieren mit ds_map_write und das Ganze schreibst in ein File.
    On teh internet u pwn noobs - but in real life noobs own you.
  • Wenn man ganz normal das Spiel speichert, werden auch Variablen gespeichert (meines Wissens). Wenn du die Variable im gamestart-event initialisierst dann sollte es klappen, wenn du bei jedem Start des Spiels den Speicherstand (der bei jedem Beenden angelegt wird) lädst.
    An sonsten könntest du die Variable auch in einer INI oder ner anderen Textdatei abspeichern und bei jedem Start laden.
  • Ok, ich hab mich jetzt für Kilik's Variante entschieden, scheint die einfachste zu sein. Doch er schreibt immer hin:
    (!variable_global_exists(global.allkills))
    Unknow variable allkills...
    Ich hab das im Game-start event drinnen stehen:
    global.vis=false;
    if (!variable_global_exists(global.allkills))
    {global.allkills = 0;}
    An global.vis liegts nicht.
    Danke schon im Vorhinaus.

    OHHHH EDIT: Könnte es an dem ! liegen, weil ich nur game maker 6? Ich probierst gleich mal aus...
    2EDIT: Nein, liegt nicht am !.
  • Die einzige Möglichkeit wäre, den Wert in eine Datei zu speichern und beim
    Spielstart zu testen, ob diese Datei existiert. Dann kannst du den Wert wieder
    auslesen und gut is.
    Ich glaub mit einer ner .ini Datei dürfte das relativ einfach zu realisieren sein.
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Nein ich fürchte Kilik hat dich falsch verstanden ;-)
    Die Variale musst du dazu schon in einer Datei speicher, wie Foo und Spellmaker geschrieben haben.
    www.glowingorb.de
    „Wenn es im Universum noch irgendwo intelligente Lebewesen gibt, dann kennen sie vielleicht Schach, höchstwahrscheinlich jedoch GO

    (Schachweltmeister Emanuel Lasker)
  • Nein, da alle Variablen beim beenden des Spiels aus dem Arbeitsspeicher gelöscht werden.
    Wie gesagt, ich würde dir raten, dich mit dem Kapitel ini files in der Hilfe zu beschäftigen,
    da sind die wichtigsten Sachen erklärt.

    Edit: zu langsam...
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Ok, ich schau mir mal die Hilfe an, schaune, studiere sie... :thumbsup:

    [Zusammengeschoben durch CAS]

    So, ich hab das mal probiert, aber da passiert nichts. Also ich hab folgendes ins Creat event gegeben:

    GML-Quellcode

    1. if (file_exists("kills.sav")==false)
    2. {
    3. global.kills=0;
    4. dat=file_text_open_write("kills.sav");
    5. file_text_write_string(dat,global.kills);
    6. file_text_close(dat);
    7. }

    Aber das funzt nicht. Was mach ich falsch?
    Ich hab mir file und so noch nicht gearbeitet, darum ist dieses Gebiet bei mir ganz neu.
    Danke im Vorhinaus.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Afroman ()

  • Was genau funktioniert nicht? Kommt eine Fehlermeldung?
    Auf jedenfall muss die Zeile

    GML-Quellcode

    1. file_text_write_string(dat,string(global.kills));

    heißen, denn ich denke dass global.kills kein String sondern eine Zahl darstellen soll.
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • So, jetzt würde alles funzen. Bei erstem mal starten funzt alles, doch sobald ich das spiel beende und es neu starte steht da:
    draw_text(x,y,string(global.kills))
    Unknow varaible global.kills.
    Als würde er das nicht richtig abspeichern:
    Das hab ich verwendet:
    Spoiler anzeigen

    [Creat-event]

    GML-Quellcode

    1. if (file_exists("kills.sav")==false)
    2. {
    3. global.kills=0;
    4. dat=file_text_open_write("kills.sav");
    5. file_text_write_string(dat,string(global.kills));
    6. file_text_close(dat);
    7. }
    8. else
    9. {file_text_open_write("kills.sav");}

    [Press-space-event]

    GML-Quellcode

    1. global.kills+=1

    [Draw-event]

    GML-Quellcode

    1. draw_text(x,y,string(global.kills))
  • Hmm, scheint sich um Serialisierung zu drehen. Hab sowas noch nicht für beliebige Datentypen im GM gesehen.

    Kurzum ne Möglichkeit wäre: Ne Map, die kannste serialisieren mit ds_map_write und das Ganze schreibst in ein File.
    Ich kenn mich leider nicht so mit Serialisierung aus. Könntest du mir das nochmal erklären?
  • Ist eigentlich ganz einfach:

    Schreiben:
    • Du legst ne Map an
    • Füllst diese mit Key, Values
    • Erzeugst einen String ds_map_write
    • Speicherst den String in ein File


    Lesen:
    • Map anlegen
    • String aus File lesen
    • Map wiederherstellen mit ds_map_read


    Bei einer Serialisierung können also aus Variablen - mit deren Bezeichnern - in ein String umgewandelt, oder Rückgewandelt werden. Ist unheimlich praktisch :)
    On teh internet u pwn noobs - but in real life noobs own you.
  • Also ich hab, wie üblich wieder ein paar Fragen:
    Was genua mit Map anlegen meinst du?
    Das hier:

    GML-Quellcode

    1. ds_map_create()

    Wie füll ich die:
    So:

    GML-Quellcode

    1. ds_map_add(id,key,value)

    Speicher in eine File sollte klar sein.
    Zu lesen:
    Map anlegen, genau das gleiche wie oben?
    string aus file lesen:

    GML-Quellcode

    1. file_text_read_string(str)

    Stimmt das alles so?

    Danke nochmals für deine Hilfe :thumbsup:

    LG Afroman
  • Ok, morgen setzt ich ich hin, und schau, wie ich das am bsten mache.
    Danke nochmals für deine Hilfe. :thumbsup:
    EDIT:

    GML-Quellcode

    1. ds_map_read()

    Die funktion existiert gar nicht 8|
    EDIT: Weiß jemand was an der funtkion falsch ist?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Afroman ()