Variable zwischenspeichern und später wieder aufrufen

  • GM 8
  • Variable zwischenspeichern und später wieder aufrufen

    Hi... :)

    Um GML zu lernen (und natürlich auch aus Lust und Laune) bastle ich zurzeit was neues: Ein Top down Weltraumspiel, in dem man mit einem Schiff rumfliegt, Piratenschiffe abschießt, Gegenstände einsammelt, ganz viele Upgrades kauft, ect.

    An der X-Reihe von Egosoft orientierend hab ich gemacht, dass man Gegenstände nur einsammeln kann, wenn die Frachtluke offen ist. Funktioniert bestens.

    Logischerweise sollten die Schiffsschilde ausgeschaltet werden, wenn die Frachtluke geöffnet ist, weil die Schilde ja sonst den Gegenstand abstoßen würden, so wie andere Materie auch (wenigstens ein bisschen Realismus). Die Schilde laden sich selbst alle 3 Sekunden wieder zu 1/100 von selbst auf und das möchte ich ebenfalls deaktivieren, wenn die Frachtluke offen ist, damit diese nicht weiterladen.

    Und genau da hakt es:

    :event_step:

    GML-Quellcode

    1. // Open cargo hatch
    2. if (keyboard_check_pressed(ord('O')))
    3. {
    4. if (cargo_open = false)
    5. {
    6. sound_play(snd_item);
    7. cargo_open = true;
    8. shield_last = shield;
    9. shield = 0;
    10. shield_rate = 0;
    11. }
    12. else
    13. {
    14. sound_play(snd_item);
    15. cargo_open = false;
    16. shield = shield_last;
    17. shield_rate = shield_lvl * 10;
    18. }
    19. }
    Alles anzeigen



    Der momentane Wert der Schilde soll zwischengespeichert werden, das Schild deaktiviert (also auf 0 gesetzt) werden und wenn man die Frachtluke schließt, soll der vorher gespeicherte Schildwert wiederhergestellt und das Aufladen der Schilde wieder aktiviert werden. Wie muss das aussehen? Mein Code bewirkt, dass der Schildwert immer wieder mit 0 überschrieben wird, weil er im Step-Event ist. Hab bestimmt nur wiedern üblen Denkfehler... :)

    GML-Quellcode

    1. if ! (freedom) { instance_destroy(gamemaker); instance_create(x, y, html5); }
  • Du bist mir gerade um 100% symphatischer geworden da Du X kennst. (Auch die alten Teile?)

    Step Event:

    GML-Quellcode

    1. if cargo_open = false
    2. {
    3. shield += shield_rate/room_speed
    4. }
    5. else
    6. {
    7. shield = 0
    8. }


    Und beim Key-Press Event:

    GML-Quellcode

    1. if cargo_open = true
    2. {
    3. cargo_open = false
    4. shield = last_shield
    5. }
    6. else
    7. {
    8. last_shield = shield
    9. cargo_open = true
    10. }
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Cool. Funktioniert einwandfrei. Vielen Dank! Total simpel, wie ichs mir schon dachte. :)

    Nebenbei bemerkt: Ich sollte wohl mehr Events benutzen, allein schon aus Perfomancegründen... Ich hab meinen gesamten Schiffscode, Steuerung usw. im Step Event.

    GML-Quellcode

    1. if ! (freedom) { instance_destroy(gamemaker); instance_create(x, y, html5); }

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