Acting und Events
Contents
Acting und Events#
Du kannst bis jetzt ein Board erstellen und Tokens darauf gestalten. Diese können sich aber noch nicht bewegen.
Für dynamische Programme sind mehrere Funktionen besonders relevant:
Die
on_setup()
-Methode wird ganz am Anfang aufgerufen. Hier wird dein Board eingerichtet und konfiguriert.Die
act
-Methode wird in jedemFrame
genau einmal aufgerufen.Es gibt verschiedene Event-Methoden, wie z.B.
on_key_pressed
,on_clicked_left
, …, mit denen du auf bestimmte Ereignisse reagieren kannst.
Die act()-Methode#
Das Spielfeld und alle Tokens können über die Methode act()
gesteuert
werden. Diese Methode wird immer wieder aufgerufen (genau genommen: Alle
board.speed
Zeiteinheiten) bis das Spiel beendet wird.
Wenn du ein Token erstellst, kannst du mit dem Decorator @register
eine act()
-Methode zum Spielfeld oder zu deinen Token hinzufügen:
Beispiel:
from miniworldmaker import *
board = Board()
board.add_background("images/grass.jpg")
player = Token((90,90))
player.add_costume("images/player.png")
@player.register
def act(self):
player.y = player.y - 1
board.run()
See also
Hier findest du eine etwas umfangreichere Erklärung, wie du Code mit Funktionen schreiben kannst.
Orientierung eines Kostüms#
Man sieht hier ein Problem: Die Standard-Ausrichtung des Tokens ist nach oben, das Bild ist aber nach rechts orientiert.
Mit Hilfe von token.costume.orientation
(oder token.orientation
) kannst du die Orientierung korrigieren:
from miniworldmaker import *
board = Board()
board.add_background("images/grass.jpg")
player = Token((90,90))
player.add_costume("images/player.png")
player.costume.orientation = -90
@player.register
def act(self):
player.y = player.y - 1
board.run()
Nun läuft schaut die Figur in die Richtung, in die es sich bewegt.
See also
Innerhalb von Methoden kannst du mit self
die Attribute und Methoden des jweiligen Objekts aufrufen.
Siehe hier mehr dazu.
See also
Mit Hilfe von board.speed
und board.fps
kannst du einstellen, wie oft das Board neu gezeichnet wird
und wie oft act()
aufgerufen wird, siehe hier mehr dazu.
Ereignisse#
Events(Ereignisse) sind ein zentrales Konzept des Miniworldmakers:
Mit Events können Eingaben abgefragt werden (z.B. Mausklicks oder Tastatureingaben).
Mit Events können Objekte miteinander kommunizieren (z.B. über Nachrichten)
Ein Ereignis registrieren#
Damit das Board oder ein Player auf ein Ereignis reagiert, muss dieses -wie die
act()
oder setup()
Methode- registriert werden.
@player.register
def on_key_down_w(self):
self.move()
Hier wird die Methode on_key_down_w
registriert, die überprüft, ob die
Taste w gedrückt wurde.
Sobald die Taste betätigt wird, bewegt sich das Token player
um einen
Schritt nach vorne.
Beispiel:
from miniworldmaker import *
board = Board()
board.add_background("images/grass.jpg")
player = Token((90,90))
player.add_costume("images/player.png")
player.costume.orientation = -90
@player.register
def on_key_down_w(self):
player.y = player.y - 1
board.run()
Note
Jede registrierte Methode benötigt als ersten Parameter
das Schlüsselwort self
.
Mit diesem Schlüsselwort kannst du
innerhalb der Methode auf Attribute und Methoden des Objekts zugreifen, siehe dazu auch self
Beispiel#
import miniworldmaker
board = miniworldmaker.TiledBoard()
board.columns = 20
board.rows = 8
board.tile_size = 42
board.add_background("images/soccer_green.jpg")
board.speed = 30
player = miniworldmaker.Token()
player.add_costume("images/player_1.png")
@player.register
def on_key_down_w(self):
self.move()
@player.register
def on_key_down_a(self):
self.turn_left()
@player.register
def on_key_down_d(self):
self.turn_right()
@player.register
def on_key_down_s(self):
self.move_back()
board.run()
Ausgabe:
on_key_down und on_key_pressed#
Es gibt die beiden Funktionen on_key_down(self, key)
und
on_key_pressed(self, key)
:
on_key_down
wird genau einmal aufgerufen, wenn die Taste gedrückt wird.on_key_pressed
hingegen wird immer wieder aufgerufen, solange die Taste gedrückt wird.
Beispiel:
from miniworldmaker import *
board = Board()
board.add_background("images/grass.jpg")
player = Token((90,90))
player.add_costume("images/player.png")
player.costume.orientation = -90
@player.register
def on_key_down_w(self):
player.y = player.y - 1
player2 = Token((180,180))
player2.add_costume("images/player.png")
player2.costume.orientation = -90
@player2.register
def on_key_pressed_s(self):
player2.y = player2.y - 1
board.run()
Note
Beide Funktionen gibt es sowohl in der Variante on_key_down_b(self)
,
on_key_pressed_c(self)
um das betätigen einer konkreten Taste
abzufragen als auch in der Variante on_key_down(self, key)
on_key_pressed(self, key)
um alle Tastaturabfragen zu verarbeiten.
Nachrichten senden#
Mit send message(self, message)
kannst du eine globale Nachricht an
alle Objekte und das Board senden. Diese Nachrichten können mit
on_message
verarbeitet werden.
Beispiel:
@player.register
def on_message(self, message):
if message == "Example message":
do_something()