Kann man die komplette Abarbeitung eines Events erzwingen?

  • GM 8
  • Kann man die komplette Abarbeitung eines Events erzwingen?

    Morgen, liebe Community,

    ich hab da noch mal eine Frage: Wenn in einem Spiel z.B. die Abbruch- oder Ende-Bedingung eines Levels erreicht wird (z.B. letztes Leben verbraucht), dann endet das Spiel immer äußerst abrupt, sogar das bereits angefangene Event wie "Gegner zerstören" wird nur noch angefangen, aber nicht mehr vollständig ausgeführt. Weil die Abbruchbedingung ja erreicht wurde.
    Ich möchte aber gerne, daß der Spieler z.B. sieht, daß der letzte Gegner auch zerstört wurde. Also dass das Event komplett bis zum Ende durchgearbeitet wird. Habe leider aber noch keine Lösung gefunden, wie man das erzwingen kann.
    Wenn es nur ein einziges Event ist, packe ich das immer in ein User-Event, das ich dann am Schluß noch mal aufrufe - aber wenn es eine Reihe von Kettenreaktionen sind, die da bei Zerstörung eines Objektes ablaufen, dann wird das schwierig. Um nicht zu sagen: alles doppelt gemoppelt.

    Weiß jemand, wie ich es erzwingen kann, daß ein bestimmtes Event auch dann bis zum Ende ausgeführt wird, wenn die Abbruchbedingung erreicht wurde?

    Danke schon mal im voraus,
    Archie

    PS: Jetzt bin ich aber froh, daß ich das komische rückwärtslaufende rosa Pony wieder los bin! :D
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Verwende für deine Leben eine eigene Variable und statt Game Over teleportierst du dich auf eine andere Map auf der Game over steht oder soetwas.
    Und wenn du verloren hast, kannst du ja die Steuerung blockieren und eine Sekunde warten bevor du auf die "Game over Map" teleportiert wirst.

    gruß
    naibaf
    True story!
  • naibaf77 schrieb:

    Verwende für deine Leben eine eigene Variable und statt Game Over teleportierst du dich auf eine andere Map auf der Game over steht oder soetwas.

    Das mache ich doch schon längst. Deshalb werden aber trotzdem nicht mehr die Reaktionen alle angezeigt.
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Du machst einfach ein Objekt mit der geringsten depth und überprüfst dort im end-step event ob der player tod ist und zerstörst ihn erst dann.
    Da das als Letztes überprüft wird, werden logischerweise alle anderen Events noch ausgeführt.
  • Chaos Creator schrieb:

    Du machst einfach ein Objekt mit der geringsten depth und überprüfst dort im end-step event ob der player tod ist und zerstörst ihn erst dann.
    Da das als Letztes überprüft wird, werden logischerweise alle anderen Events noch ausgeführt.
    Nur mal so nebenbei:
    Die depth eines Objektes / einer Instanz ist nicht gleich ihrer ID. Die einzelnen Events werden chronologisch durchgearbeitet, beginnend bei der Instanz mit der niedriegsten ID, bis zu der Instanz mit der höchsten ID.
    Was der depth Wert eines Objektes / einer Instanz macht, ist zu bestimmen, wenn der Game Maker die einzelnen Instanzen zeichnet, in welcher Reihenfolge sie gezeichnet werden. Dabei werden Instanzen mit einer höhren depth zuerst gezeichnet, bis zur kleinsten depth Instanz. Man kann somit also die "normale" Reihenfolge (die nach der ID verläuft) ändern.
    木曜日 (Mokuyōbi)
  • Ich würde anstatt des Levelübergangs einfach einen alarm starten, der dann nach 1-2 Sekunden Verzögerung den Levelübergang ausführt. Gleichzeitig sollte sich der Spieler nicht mehr bewegen können (z.B. per Variablenabfrage um alle Bewegungscodes).

    Create Event:

    GML-Quellcode

    1. finished=false;


    Step Event:

    GML-Quellcode

    1. if (finished==false)
    2. {
    3. // Bewegungscode
    4. // Code der Lebensenergie überprüft
    5. }


    Collision Event mit obj_goal:

    GML-Quellcode

    1. if (finished==false)
    2. {
    3. finished=true;
    4. alarm[0]=room_speed*2;
    5. }

    Alarm 0 Event:

    GML-Quellcode

    1. finished=false;
    2. room_goto_next();


    Du könntest die Variable finished zb auch noch im Draw Event abfragen und falls true ein schwarzes Rechteck mit ansteigendem Alpha über den ganzen Screen zeichnen, dann fadet der Level langsam aus.
    Einige meiner Spiele:
  • @ Mokuyobi: Falsch. Die Instanzen werden von der geringsten zur höchsten depth abgearbeitet (hab ich extra ausprobiert, weil du mich verunsichert hast). Nur bei gleicher depth geht es der ID nach.

    -> Ich denke meine Lösung funktioniert, und ist in diesem Fall die einfachste.
  • Na, das sind ja gleich mehrere Vorschläge auf einmal. Vielen Dank erst mal. Werde die alle der Reihe nach checken und dann schauen, welchen ich davon verwende.

    Du könntest die Variable finished zb auch noch im Draw Event abfragen und falls true ein schwarzes Rechteck mit ansteigendem Alpha über den ganzen Screen zeichnen, dann fadet der Level langsam aus.

    Auch nicht schlecht, die Idee... 8)

    Schönen Abend noch zusammen,
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para: