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).
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.
Das musst du selber wissen was nach einer zeitlichen Verzögerung ausgeführt werden soll und was jeden step oder nur bei einer Kollision. Das können wir nicht für dich entscheiden.
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.
Teste doch mal beide Möglichkeiten aus. EtwasTry and Error bei einer vergleichsweise einfachen Funktion schadet doch nicht und Du lernst dadurch effektiver.
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
/// @description Init Variablen
speed_ =4
Step-Event
GML-Quellcode
/// @description Steuerung
hspeed=0
if (keyboard_check(vk_left)) {
hspeed-= speed_
}
if (keyboard_check(vk_right)) {
hspeed+= speed_
}
if (!place_free(x+hspeed, y)) {
if (hspeed>0) {
move_contact_solid(0, -1)
}
if (hspeed<0) {
move_contact_solid(180, -1)
}
hspeed=0
}
Alles anzeigen
Collision-Event with Coin
GML-Quellcode
/// @description Coin einsammeln
sprite_index= sPlayerRed // wir wechseln auf Rot
alarm[0] =room_speed*2// Alarm auf 2 Sekunden gestellt
instance_destroy(other) // Coin zerstören
Alarm-Event(0)
GML-Quellcode
/// @description wir wechseln wieder zu Blau
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).