Leben, Score und andere Daten im raumwechsel beibehalten

  • GM 8

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

  • Leben, Score und andere Daten im raumwechsel beibehalten

    Ein Problem dem man schon öfter begegnet, bei dem ich aber nie wirklich ne ganz funktionierende lösung gefunden habe.

    Mein Player_Object betritt eine Schaltfläche(unsichbares Objekt), dadurch findet ein raumwechsel statt, wodurch aber Leben, Score und Items, etweder auf den create anfang gesetzt werden oder aber komplett anders als man die angaben zuvor hatte.

    ich benutze ungern die möglichkeit räume oder objekte auf persitent zu setzten weil das mir an machen stellen den code kaputt macht.

    Die Informationen über Menge usw. sind alle in einem objekt deklariert was ich "Steuer" genannt habe, dort stehen auch solche codes wie:

    wenn leben kleiner gleich 0 dann instance destroy.

    kann mir bitte jemand weiterhelfen
  • Hi,

    also ich verzichte einfach komplett auf Räume und generiere alles irgendwie... gut, keine gute Idee für Anfänger.

    Um Variablen über einen Raumwechsel zu erhalten, kann man sie in ein persistentes Objekt speichern. Da du das scheinbar nicht möchtest, kannst du auch globale Variablen benutzen (global.meineVariable = wert;). Diese sind dann immer von jedem Objekt aus zu erreichen. Du kannst diese auch nur temporär nutzen, um die Variablen kurz zu sichern und nach dem Wechsel wieder zu "laden", wenn du keine festen globalen Variablen für alles erstellen möchtest, die immer erhalten bleiben sollen.

    Alternativ könnte man z.B. auch die gewünschten Daten extern speichern (ini, txt,...), aber das macht hier vermutlich nicht viel Sinn.

    Hinweis: du kannst Instanzen auch nur kurzzeitig auf "persistent" stellen und sie nach dem Raumwechsel wieder normal machen.
  • Ich glaube, du setzt im Create-Event score auf 0
    und da bei einem Neuen Raum alle Creates aufgerufen werden, ist der Score wieder auf 0.
    Was du da machen kannst ist:

    GML-Quellcode

    1. if room == room_level1 { // Schauen, ob es der erste Level ist
    2. score = 0 // Wenn ja, setze score auf 0
    3. } // Fertig

    Das muss in das dann statt deinem Code in das Create-Event, wenn ich das richtig verstehe...
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Speicher doch seulche Informationen in globalen Variabeln. Ich würde mir ein Script anlegen (scr_globals) und dort alles unterbringen. Also z.B. global.var_score=0; global.var_health=100; etc.. Am ende unter den Variabeln jetzt noch room_goto_next(); anfügen und das wars auch schon fast.
    Die globalen Variabeln müssen nur einmal beim Spielstart aufgerufen werden.
    Jetzt erstell einfach noch einen neuen Raum und im Room Creation Code rufst du das Skript mit scr_globals(); auf. Der raum muss vor deinem ersten Level sein!

    Jetzt kannst du z.B. in Raum1 eine Kugel abkriegen, global.health wird z.B. 50 abgezogen und wenn du den Raum wechselst bleibt die Variable bei 50
  • das geht auch so

    Quellcode

    1. if variable_global_exists("variable") == false
    2. global.variable=0
    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
  • husi012 schrieb:

    das geht auch so

    Quellcode

    1. if variable_global_exists("variable") == false
    2. global.variable=0
    Nein, diese Funktion sollte man nicht mehr benutzen. In Game Maker: Studio wurde sie auch abgeschafft. Wenn das Spiel also aufwärts kompatibel bleiben soll, würde ich darauf verzichten!
  • Benutzer online 1

    1 Besucher