Timer#
Mit Timern kannst du Ereignisse mit einer Verzögerung ausführen. Das bedeutet, dass eine Aktion nicht sofort, sondern erst nach einer bestimmten Anzahl an Millisekunden oder Frames stattfindet.
Timer sind hilfreich, wenn etwas erst nach einer bestimmten Zeit passieren soll.
:::{note} Pythons time
-Bibliothek enthält die Funktion time.sleep(...)
, um Verzögerungen zu erzeugen. Diese sollte hier jedoch nicht verwendet werden, da sie globale Pausen verursacht und zu unerwünschten Nebeneffekten führen kann. :::
Einen Timer starten#
Um einen Timer zu starten, kannst du folgendes Beispiel verwenden:
from miniworlds import ActionTimer
[...]
ActionTimer(24, player.move)
Erklärung#
Nach 24 Frames wird der Timer ausgelöst.
Dann wird die Methode
player.move
ausgeführt.
Verschiedene Timer-Typen#
Je nach Anwendungsfall gibt es verschiedene Arten von Timern:
ActionTimer#
Der ActionTimer führt nach einer bestimmten Zeit eine Methode einmalig aus und entfernt sich danach automatisch. Er eignet sich gut für verzögerte Einzelaktionen.
ActionTimer(24, player.move, None)
In diesem Beispiel wird die move
-Funktion des Objekts player
einmalig nach 24 Frames ausgeführt.
LoopActionTimer#
Der LoopActionTimer funktioniert ähnlich wie der ActionTimer, wiederholt die Aktion jedoch in regelmäßigen Abständen. Er eignet sich für fortlaufende Aktionen.
LoopActionTimer(24, player.move)
Hier wird die Methode move
des player
alle 24 Frames ausgeführt.
Um einen LoopActionTimer
zu stoppen, kannst du ihn wie folgt entfernen:
loopactiontimer = LoopActionTimer(24, player.move)
...
loopactiontimer.unregister() # Stops the LoopActionTimer
Timer mit Ereignissen verknüpfen#
Ähnlich wie bei Sensoren kannst du Timer so konfigurieren, dass Methoden zu bestimmten Zeiten ausgeführt werden. Dazu registrierst du Methoden, die bei einem Timer-Ereignis aufgerufen werden sollen.
Beispiel für ein einmaliges Timer-Ereignis:
@timer(frames=24)
def moving():
player.move()
In diesem Fall wird die Funktion moving
einmalig nach 24 Frames aufgerufen und führt player.move()
aus.
Um einen wiederholenden Timer zu registrieren, verwende:
@loop(frames=48)
def moving():
player.turn_left()
player.move(2)
Hier wird die Methode moving
alle 48 Frames aufgerufen, dreht den Actor nach links und bewegt ihn vorwärts.