Sprite für zwei Sekunden ändern, dann zurückändern

    Sprite für zwei Sekunden ändern, dann zurückändern

    Wie kann man es so machen, dass man, wenn man einen ''cactus_obj'' berührt, dass JOHN für zwei Sekunden den Sprite hurt_john1 wird und dann wieder john1 (normaler JOHN-Sprite).

    MfG


    CinoComeback :deal:
    Ich setze mal voraus, dass Du die Grundlagen der GM-Events bereits kennst (und da genau weisst, was zu suchen wäre). Deswegen wäre hier eine rein logische Vorgehensweise, wie man das Ganze handhaben könnte.

    Abhängig von Deinen festgesetzten FPS sollte es eig. möglich sein, mittels Kollisionsabfrage John -> cactus_obj den Sprite_Index für beispielsweise 120 Frames (bei einer festgelegten Option von 60 FPS in den Projekteinstellungen) in Deine alternative Johngrafik (hurt_john1) zu ändern und nach Ablauf der 120 Frames wieder in die Ausgangseinstellung zu setzen.
    Überleg dochmal welches Event in Frage kommen könnte. Wenn du das nicht weißt, dann wäre es das erste was du in der Hilfe nachlesen solltest, welches Event wie funktioniert.

    Und für welche Aktion will dir der Befehl/Code nicht einfallen? Wie man einen Sprite wechselt? Oder wie man ein Alarm-Event startet?
    Ein Alarm ist wie eine Eieruhr.
    Wenn du im code "alarm[0]=60;" setzt wird "das Alarm 0-Event" 60 steps später ausgeführt. (Bei room_speed=30 wäre das nach 2 Sekunden).
    Das darfst du allerdings nicht in das step-event ohne bedingung schreiben, sonst wird der timer jeden step auf 60 zurückgesetzt und erreicht niemals 0.
    Nein, so meinte ich das nicht. Ich meine, wo gehört der Code ''alarm[0] = ZAHL'' hin und wo gehört die Aktion hin, die z. B. jede 10 Sekunden (300 Frames, das Spiel benutzt 30 Frames) ausgeführt werden soll? Oder muss beides in einen Code? Ich weiß es eben nicht. :/
    Ein bisschen mehr Hilfestellung:

    GML-Quellcode

    1. alarm[0]=300 //Führe den alarm[0] nach 10 sekunden aus

    gehört dahin wo der alarm das erste mal ausgelöst werden soll.

    Soll es erst nach einer Kollision passieren? Dann ins Kollisions-Event.
    Soll etwas konstant alle 10 Sekunden passieren, also von beginn des Levels an, dann ins Create-Event.

    Jetzt möchtest du aber nachdem der Alarm0 das erste mal ausgeführt wurde, dieser erneut nach 10 Sekunden ausgeführt wird? Einfach ans Ende des Codes im Alarm0 nochmal die Codezeile packen. So startet sich der Alarm selber immer wieder neu.
    Das wird eh nix ;) hier mal ein Ansatz für Dich, benötigt wird folgendes:

    1 x oPlayerBlue
    1 x oPlayerRed
    1 x oCoin
    1 x oSolid

    Create-Event

    GML-Quellcode

    1. /// @description Init Variablen
    2. speed_ = 4


    Step-Event

    GML-Quellcode

    1. /// @description Steuerung
    2. hspeed = 0
    3. if (keyboard_check(vk_left)) {
    4. hspeed -= speed_
    5. }
    6. if (keyboard_check(vk_right)) {
    7. hspeed += speed_
    8. }
    9. if (!place_free(x + hspeed, y)) {
    10. if (hspeed > 0) {
    11. move_contact_solid(0, -1)
    12. }
    13. if (hspeed < 0) {
    14. move_contact_solid(180, -1)
    15. }
    16. hspeed = 0
    17. }


    Collision-Event with Coin

    GML-Quellcode

    1. /// @description Coin einsammeln
    2. sprite_index = sPlayerRed // wir wechseln auf Rot
    3. alarm[0] = room_speed * 2 // Alarm auf 2 Sekunden gestellt
    4. instance_destroy(other) // Coin zerstören


    Alarm-Event(0)

    GML-Quellcode

    1. /// @description wir wechseln wieder zu Blau
    2. sprite_index = sPlayerBlue



    Bau Dir einen Boden, mit links und rechts einer Wand, mit oSolid(welches auch Solid geflaggt sein muss)
    und verteile auf dem Boden ein paar Münzen(oCoin). Dann setze den Spieler oPlayerBlue auf den Boden.
    Alle Objekte haben den Hotspot links/oben und sind bei mir 32x32 Pixel groß.
    Wenn Du nun startest, dann kannst Du einen blauen Würfel(oPlayerBlue), nach links und rechts bewegen
    und wenn Du eine Münze(oCoin) einsammelst, dann verschwindet diese und Dein Spieler wird für 2 Sekunden
    zu einem roten Würfel(oPlayerRed).

    Miradur