Die Wait Aktion in dem System Objekt wartet eine bestimmte Anzahl Sekunden bevor es zu der nächsten Aktion übergeht. Es erinnert sich an all die ausgewählten Objekte somit funktioniert es genau gleich wie ein normales Event, nur ein wenig Verzögert. Während des Wartens wird das Ausführen von anderen Events normal fortgeführt.
Zum Beispiel berücksichtige:
+ On spacebar pressed
-> Player: spawn a bullet
-> Audio: play 'bang' sound
Beim Drücken der Leertaste werden deine Kugeln sofort mit einem Knall entstehen. Fügst du jedoch eine Wait Aktion hinzu:
+ On spacebar pressed
-> System: wait 1 second
-> Player: spawn a bullet
-> Audio: play 'bang' sound
Beim Drücken der Leertaste besteht eine 1-Sekunden lange Verzögerung, wobei erst danach die Kugel mit einem Knall ensteht. Drückst du nun die Leertaste 2 mal schnell hinter einander, wird es doppelt in die Warteschlange aufgenommen, somit werden 2 Kugeln gefeuert, jede davon eine Sekunde nach dem du die Leertaste betätigt hattest.
Du kannst die Warten Aktion auch mehrere male in einem Event benutzen. Zum Beispiel:
+ On start of layout
-> Text: set text to "Hallo da!" & newline
-> System: wait 1 second
-> Text: append text "Wie geht es dir?" & newline
-> System: wait 1 second
-> Text: append text "Schön dich zu treffen!"
Dieses Event fügt jede Nachricht zu dem Text Objekt hinzu, bei einem 1-Sekunden Interval. Vergiss nicht dass die Anderen deiner Events normal weiter laufen während die Waits am warten sind. Jedes Event kann jeder Zeit so viele Waits abrufen wie es will, dabei läuft alles
wie geplant.
Hier ein weiteres Beispiel:
+ Every 1 second
-> Sprite: set invisible
-> System: wait 0.3 seconds
-> Sprite: set visible
Das Bild blinkt.
Ein weiteres Beispiel:
+ Every 2 seconds
-> Enemy: spawn 'bullet'
-> System: wait 0.2 seconds
-> Enemy: spawn 'bullet'
-> System: wait 0.2 seconds
-> Enemy: spawn 'bullet'
Alle 2 Sekunden feuert der Gegner eine Salve von 3 Schüssen, jede davon 0.2 Sekunden von einander entfernt.
Wenn du glaubst ein echter Profi zu sein, kannst du auch Events in einem Loop planen:
+ On start of layout
+ Repeat 10 times
-> System: wait loopindex seconds
-> Text: append text "Time = " & time & newline
Dieses Event führt dazu dass jede Sekunde für insgesamt 10 Sekunden, eine neue Linie zu dem Text Objekt hinzu gefügt wird. Dies geschieht weil der "Repeat 10 times" Zustand die Aktion 10 mal ausführt, und bei jeder Runde wird ein Wait für eine andere Zeitspanne gesetzt gefolgt von einer Hinzufügung einer Text Linie. Dies verbreitet all die "append text" Aktionen im Laufe der Zeit.
Vermerke: wartest du eine Konstante Menge an Zeit in einem Loop, wie hier:
+ On start of layout
+ Repeat 10 times
-> Wait 1 second
-> Append text "Time = " & time & newline
Wird es warscheinlich nicht das tun was du eigentlich erwartest. Wenn das erste 'Wait' erreicht wird, wird der loop weiter geführt (da der Rest des Event Sheets weiter geführt wird unabhängig der Waits). So dass der Loop sofort beendet wird, dabei werden 10 'Append' Aktionen nach jedem Einzelnem mit einer 1-Sekunden Verzögerung geplant. Somit wird nach einer Sekunde, alle Zehn Aktionen gleichzeitig ausgeführt. Ist dies nicht was du erreichen willst, benutze entweder Every X seconds System Kondition, oder verwende die loopindex basierte Variante wie oben vorgeschlagen.
Für fortgeschrittene Benutzer
Die Wait Aktion speichert den Status des gesamten SOL und bricht das Momentane Event ab. Sobald die Wartezeit abgelaufen ist, wird die ganze SOL wie sie war wieder hergestellt (minus jedes Objekt das zerstört wurde), und das Event wird an dem Punkt fortgesetzt wo die Aktion der Warte Aktion folgt. Es führt ebenso jedes Sub-Event fort. An jedem Punkt an dem eine weitere Wait Aktion angetroffen wird, passiert der selbe speichern-SOL-und-warte Prozess. So kannst du verschiedene Teile eines Events ausführen und zwar zu verschiedenen Zeitpunkten.
Ein weiterer Trick: "Wait 0 seconds" verschiebt die folgenden Aktionen bis ans Ende des Event Sheets.
Schlussfolgerung
Dies ist ein wirklich mächtiges Feature. Falls du jemals Construct Classic benutzt hast, solltest du es als viel elegantere Lösung empfinden, als die Funktion des Objekts "call after delay". Dinge über Zeit mit Events zu Planen war schon immer ein wenig Kopfzerbrechend, so hoffen wir dass Dies alles schöner und simpler macht!