Persistenz für alle Räume deaktivieren

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

  • Persistenz für alle Räume deaktivieren

    Hi liebes Forum.
    Habe hier gesucht und auch per deutsche GM-Hilfe (immer wieder freue ich mich, dass es sie gibt) nach Antwort gesucht. Allerdings in diesem Fall vergebens. Und dies, obwohl es möglicherweise ein recht leicht zu lösendes, bereits oft beantwortetes Problem ist...

    Geht um "persistent". Hierzu habe ich gleich zwei Fragen. Frage 1 aus reinem Interesse und Frage 2 wird benötigt, damit mein kleines Spielchen endlich als fertig bezeichnet werden kann (letzte Hürde).

    Frage 1

    Ich habe in allen Rooms "persistent" aktiviert, weil es erforderlich ist. Nun stelle ich mir die Frage - kostet es sehr viel Rechenleistung, wenn es zB. 100 Rooms sind? Ich meine, irgendwo wird das alles ja irgendwie gespeichert... Oder läuft das ohnehin nicht permanent mit, sodass ein persistenter Raum beim Verlassen "gespeichert" wird und beim Betreten diese Informationen wieder aufgerufen werden? Irgendwie halt so... Leider meldet mein Internet Pc (meine Referenz-Kiste) beim Ausführen des Games eine ziemlich hohe CPU-Auslastung und ich nun Angst habe, dass es an meinen (100) persistenten Räumen liegt...

    Frage 2 (die Wichtigere)

    Sobald meine Spielerfigur stirbt bzw. das Spiel per Escape abgebrochen wird, gelangt man wieder in den Titelscreen-Room. Rufe ich von hier aus das Spiel erneut auf, sind alle Rooms nachwievor persistent. Per Funktion "Restart" könnte ich das Problem zwar umgehen - doch wieso sollte bei jedem Neuversuch der bald lästig werdende Vorspann (vor dem Titelscreen)
    ablaufen? Was ich bräuchte ist also eine Funktion, die ausschliesslich ALLES, das persistent ist, UNpersistent macht. Noch dazu auch sämtliche Sprites... all persistent end oder so ;)

    Über eine Antwort würde ich mich sehr freuen, weil ich dann endlich das Projekt abschliessen könnte. Der Rest ist fertig. Danke vielmals und schöne Grüsse.

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

  • ich glaube es gibt einen funktion game restart oder so da wird das spiel dann komplett neu gestartet
    ansonsten gibt es glaub ich nichst

    zu frage eins ich würde mal sagen das persistente rooms immer permannet da sind du siehst sie nur nicht.
    andere frega müssen wirklich alle deine rooms immer da sein???

    hofe ich konnte dir helfen
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Naja, immer da sein müssen sie nicht - aber beim erneuten Betreten sollen sie eben so aussehen wie zum Zeitpunkt des Verlassens. Ist so 'was Ähnliches wie ein Labyrinthspiel. Da öffnen und schliessen sich andauernd Türen und auch sonst kann in nahezu jedem dieser Räume etwas verändert werden.

    Ja, diese Game Restart-Sache kenne ich. Aber leider wird da ALLES "resetet" - auch die Variablen (sonst könnte ich den erneuten Spielbeginn "umleiten" - zB. if global.so_und_so ist so_und_so dann Room so_und_so)

    Wie gesagt - ich möchte nicht, dass jedes Mal das Intro des Spiels neu erscheint. Dieses lässt sich zwar überspringen - wirkt trotzdem dämlich, wenn es immer wieder kommt...

    Wenn ich keine andere Möglichkeit finde, lösche ich das Intro (dann würde es gleich mit dem Titelscreen beginnen). Was aber schade wäre, weil die Idee des Intros recht "eigenwillig" ist...

    Jedenfalls danke für die Mühe, Bigmek!
  • Speichere jedesmal wenn der spieler einen neuen Raume betritt diesen in ein array

    rooms[anzahl] = room
    anzahl += 1;

    edit:

    oder einfach am anfang des spiels

    rooms[0] = room0
    rooms[1] = room1
    rooms[2] = room2
    rooms[3] = room3
    ...

    und wenn der spieler stirbt läufst du das array durch

    array mit den räumen rooms[]


    for (i = 0 i < anzahl i += 1)
    {
    room_goto(rooms)
    room_restart()

    }

    könnte ein bischen langsam sein aber müsste funktionieren
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

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

  • Hmmm...

    Naja, so'was Ähnliches hätte ich mir eh auch überlegt - aber was bringt mir das Festlegen einer Variable, wenn ich sie anschliessend per room_restart wieder wertlos mache?
    Oder habe ich da 'was falsch verstanden?

    Nochmals DANKE für Deine Mühe, aber ich frage mich, wieso es da nichts dafür gibt. Ich meine, wie machen das Leute zB. bei Zelda & Co? Bräuchte ja bloss einen "reset all"-Befehl.

    Kht schmollt, weil er nicht wahr haben möchte, dass es so'was nicht gibt :)

    Gerne stelle ich auch JEDEN EINZELNEN Room auf "antipersistent", sobald der Spieler abbricht bzw. stirbt. Wird zwar eine lange Liste, aber egal. Doch weiss ich ja nicht einmal, ob DAS möglich ist. Im Grunde will ich nur, dass ein bereits mehrfach aufgerufener, persistenter Raum aufhört persistent zu sein und sich wieder so öffnet, wie zum Beginn des allerersten Spiels. Zwar (wieder) persistent aber eben so wie zu Beginn...

    Danke!

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

  • du willst doch alle variablen und objekte zurücksetzen oder nicht
    >>>NATÜRLICH darfst du das nicht mit dem hauptroom(menüroom) machen wo das room array ist

    und zu der funktion mach das ganze doch in ein script dann hast du deine funktion
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Ich weiß zwar nicht, ob dir das weiterhilft, aber du könntest wenn der Spieler stirbt, irgendetwas in eine Datei hineinschreibt und dann anschließend das game per

    GML-Quellcode

    1. game_restart()
    neu startest.
    Im allerersten Room wird diese Datei - wenn sie existiert - ausgelesen und (wenn string xy vorhanden ist, sofort in den vorherigen room springt/bzw. in den Menüscreen.

    -gn
    Kaldor - Das erste echte MMORTS
  • Hab das mal getestest mit:
    room_persistent=false

    Funktioniert aber nur,wenn man es in dem Raum benutzt, in dem man grade ist.
    Dann werden keine Koordinaten gespeichert.
    Kommt man aber zurück zum Raum ist persistent von alleine wieder an und
    beim nächsten Verlassen des Raumes wird alles gespeichert.

    Hab auch room_persistent[room0]=false getestet.
    Funktioniert aber auch nur im Raum, wenn man sich grade in dem raum befindet.
    Wird dir also wahrscheinlich nicht helfen.^^

    gez. Ribo

    edit: was ist denn mit "room_set_persistent(room0,false)"?
    Kann es leider nicht testen,weil ich die unregistrierteversion habe.

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

  • Original von GamerNet
    Ich weiß zwar nicht, ob dir das weiterhilft, aber du könntest wenn der Spieler stirbt, irgendetwas in eine Datei hineinschreibt und dann anschließend das game per

    GML-Quellcode

    1. game_restart()
    neu startest.
    Im allerersten Room wird diese Datei - wenn sie existiert - ausgelesen und (wenn string xy vorhanden ist, sofort in den vorherigen room springt/bzw. in den Menüscreen.

    -gn


    Echt? Das wusste ich gar nicht...
    Na wenn das so ist, wäre die Sache leicht zu lösen...
    Ich schau mir das 'mal an und berichte.
    Danke vorläufig Euch ALLEN!

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

  • Also:

    1. Der Raum wird beim Verlassen gespeichert und beim Betreten wieder geladen, da läuft nicht im Hintergrund alles mit.

    2. Du kannst einen Raum nur zurücksetzen, wenn du in ihm bist. Das heißt du musst irgendwo festlegen welche Räume noch zurückgesetzt werden müssen beim betreten. Du musst also eine Liste bereits betretener Räume anlegen und bei einem Spielneustart in jedem Raum prüfen ob du schon mal drin warst, wenn ja room_persistent auf false stellen, den Raum neu starten und room_persistent wieder auf true stellen. Ne andere direkte Möglichkeit gibt es nicht.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Echt?!?
    Mann oh Mann... das würde dauern bei so vielen Räumen ;)

    Was mir gerade eingefallen ist:
    Das Einfachste ist, den Coverscreen beim ersten Aufruf zu speichern ("Game save") und beim Betätigen von Escape bzw. nach dem Tod, den Strartscreen per Load wieder aufzurufen. Klingt recht simpel, trotzdem bin ich erst jetzt draufgekommen. Und wenn man im Coverscreen "escapt", endet das komplette Game, nachdem es die Coversreen-Save-Datei löscht.

    Naja, jedenfalls scheint es eine Lösung zu geben. So oder so. Danke hierfür. ich setz mich 'mal hin und probier's...

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