Speichern friert das Spiel für einige Steps ein

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

    • Speichern friert das Spiel für einige Steps ein

      Hallo Zusammen,

      im Moment habe ich ein Problem mit der Speicherfunktion: angenommen, es wird für eine Art "Quicksave" während des Spiels, also bei voller Action, eingesetzt - wie kann man den kurzzeitigen Aussetzer umgehen? Manchmal kommen diese Ruckler gar nicht, manchmal friert das Spiel für eine viertel- bis halbe Sekunde ein. Ich habe den Verdacht, dass es an der Festplatte liegen könnte - gibt es eine Möglichkeit, den Spielstand nur in den RAM zu speichern? Oder noch eine bessere Lösung?
    • Könnte bei größeren Datenmengen durchaus an dem Festplattenzugriff liegen.
      Um das ruckeln zu verringern, könnte man anstatt gleich auf die Datei zuzugreifen
      erstmal in eine ds_list schreiben, als wäre die die Datei und dabei einen
      Eintrag als eine Zeile behandeln. Danach kann man dann die ds list relativ
      flott auf die platte schreiben.
      Das Beste wäre natürlich, wenn man den eigentlichen Festplattenzugriff in einen
      anderen Thread auslagern könnte, aber ich habe keine Ahnung, wie diese Threading
      dll für den Game Maker funktioniert und was sie genau an funktionalität anbietet.
      ___________________________________________________________
      Beware of wild pointers
      ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
    • Große Datenmengen sind wohl nicht das Problem, sondern eher Festplatten die all zu schnell in den Schlafmodus geschickt werden, und dann eine halbe Sekunde für 13kb brauchen.

      Das mit der ds_list ist eine gute Idee, vor allen DIngen soll die data structures ja (für GM-Verhältnisse) schnell sein . Aber geht das ohne einen eigenen Speichermechanismus zu schreiben? Game_save akzeptiert nur Strings, die als Dateinamen interpretiert werden.

      http://wiki.yoyogames.com/index.php/Game_save schrieb:

      What things are saved?

      Please realize that only the basic game data is being saved. That data are:

      * All global variables
      * All current room settings.
      * All instances of current room with their local variables.
      * All settings of all persistent rooms.
      * All instances of all persistent rooms.

      The settings of room include size, caption, tiles, background and views settings, but exclude the room's name (because it is just a GML constant, not a string).


      Das wäre ziemlich aufwändig zu implementieren. Da weiss ich nicht, ob der Ruckler nicht vielleicht das kleinere Übel wäre.
    • Spellmaker schrieb:

      Könnte bei größeren Datenmengen durchaus an dem Festplattenzugriff liegen.
      Um das ruckeln zu verringern, könnte man anstatt gleich auf die Datei zuzugreifen
      erstmal in eine ds_list schreiben, als wäre die die Datei und dabei einen
      Eintrag als eine Zeile behandeln. Danach kann man dann die ds list relativ
      flott auf die platte schreiben.
      Das Beste wäre natürlich, wenn man den eigentlichen Festplattenzugriff in einen
      anderen Thread auslagern könnte, aber ich habe keine Ahnung, wie diese Threading
      dll für den Game Maker funktioniert und was sie genau an funktionalität anbietet.
      Was meinst du damit, kann man etwa den Speicherstand in eine Liste schreiben?
      Soweit ich weis geht dass nur in eine Datei.

      Zu GMThreads, es ist garnicht so schwer anzuwenden.
      Die Sache dahinter ist dass er praktisch ein separates GM-spiel startet in dem man auch Zugriff auf alle variablen aus dem Hauptspiel hat. Dann kann man durch eine Funktion einen String aus GML code dieser zweiten Instanz übergeben. Dieser wird kontinuierlich ausgeführt. Also so oft es die Priorität erlaubt. Es hängt in keinster Weise mit dem Step aus dem Hauptspiel zusammen. Somit läuft es im Hintergrund und stoppt nicht das Hauptspiel, zudem kann man diesen "Tread" auf einen anderen Prozesser-Kern legen sofern der PC mehrere besitzt, somit wird das Hauptspiel überhaupt nicht beeinflusst da GM von Natur aus nur den Hauptkern benutzt.

      Ein paar Nachteile gibt es allerdings schon. Zum Beispiel läuft das Spiel wie gesagt komplett aynchron zum Hauptspiel und man sollte vermeiden allzu viel im Hauptspiel aus dem Tread heraus zu verändern. Das zerstören von Instanzen z.B. kann zum Crash führen. Auslesen ist aber kein Problem.
      Es gibt auch keine Funktion um direkt im Tread was auszuführen. Darum muss man zum Beispiel eine Variable auf True setzen wenn du speichern willst und dann im Tread abfragen und gegebenfalls speichern oder was auch immer tun.

      Ich frag mich aber was passiert wenn das Speichern ja länger dauert. Eigentlich könnte das bedeuten das im Hauptspiel schon ein weiterer step vergangen ist bis das Speichern fertig ist. Das würde bedeuten dass verschiedene Teile des Spiels in verschiedenen Ständen gespeichert würden und das könnte bei einem komplexeren Spiel vieleicht zu Bugs führen...

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)

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

    • Was meinst du damit, kann man etwa den Speicherstand in eine Liste schreiben?
      Soweit ich weis geht dass nur in eine Datei.
      Ich war so unvorsichtig, aufgrund der Tatsache, dass der Thread im Expertenforum aufgemacht wurde
      anzunehmen (bzw falsch zu lesen), dass er sich ein eigenes Speicherskript geschrieben hatte. Da ist es
      dann ein leichtes, anstatt in die Datei zu schreiben die Einträge in eine Liste zu speichern.
      @p-head: Ich würde dir auf jedenfall von den Game Maker Speicherfunktionen für eine Schnellspeicherfunktion
      abraten, da wird haufenweise unnützes Zeug mitgespeichert. Schreib dir lieber ein paar eigene Skripte, die
      die relevanten Daten lesen und schreiben, dann sollte auch dein performance Problem verschwinden.
      ___________________________________________________________
      Beware of wild pointers
      ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
    • Yup, dann muss es wohl ein eigenes Skript sein. Das mit den Threads ist auch nicht optimal, wenn man mal darüber nachdenkt. Denn der Schlafmodus der Platte hat ja vor allen Dingen bei Notebooks seinen Sinn, und die Platte soll nicht wegen des Spiels permanent auf vollen Touren sein.
      Trotzdem denke ich, dass eine in den GM eingebaute Speicherfunktion, die die Daten nur im Ram ablegt, ein Anlass für einen Feature-Request ist :)

      Danke schon mal für eure Hilfe!