DU LERNST HIER... |
wie du mit Maus-Events mausgesteuerte Aktionen auslösen kannst. Diese sind in interaktiven Spielen von grosser Bedeutung. In sogenannten Callbackfunktionen (oder kurz Callbacks) definierst du, was geschehen soll, wenn eine Maustaste gedrückt, losgelassen oder die Maus verschoben wird. Die Callbacks werden nicht durch das eigene Programm aufgerufen, sondern automatisch vom System, wenn die Maustaste betätigt wird. |
MUSTERBEISPIELE |
Beispiel 1: Beim Drücken der Maustaste wird ein neuer Fisch erzeugt |
Programm: # Gg8.py from gamegrid import * # ---------------- class Fish ---------------- class Fish(Actor): def __init__(self): Actor.__init__(self, "sprites/nemo.gif"); def act(self): self.move() if not self.isMoveValid(): self.turn(180) self.setHorzMirror(not self.isHorzMirror()) # ---------------- main ---------------------- def pressCallback(e): location = toLocationInGrid(e.getX(), e.getY()) addActor(Fish(), location) makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif", False, mousePressed = pressCallback) show() doRun() Beispiel 2: Kugeln mit gedrückten Maustaste verschieben
Da die Variable actor in beiden Funktionen verwendet wird, muss sie als global deklariert werden. Die beiden Callback-Funktionen werden beim Erzeugen des Spielfensters registriert. Programm: # Gg8a.py from gamegrid import * def pressCallback(e): global actor location = toLocationInGrid(e.getX(), e.getY()) actor = getOneActorAt(location) def dragCallback(e): if actor == None: return location = toLocationInGrid(e.getX(), e.getY()) actor.setLocation(location) makeGameGrid(8, 5, 80, Color.blue, False, mousePressed = pressCallback, mouseDragged = dragCallback) setTitle("Sort Balls") for i in range(8): ball = Actor("sprites/token_1.png") addActor(ball, getRandomEmptyLocation()) show() doRun() Beispiel 3: Zündhölzer mit Mausklick wegnehmen
Programm: #Gg8b.py from gamegrid import * class Match(Actor): def __init__(self): Actor.__init__(self, "sprites/match.gif"); def pressCallback(e): loc = toLocationInGrid(e.getX(), e.getY()) for y in range(2, 8): actor = getOneActorAt(Location(loc.x, y)) if actor != None: actor.removeSelf() makeGameGrid(48,9,12,False,mousePressed = pressCallback) nbMatches = 15 for i in range(nbMatches): addActor(Match(), Location (2 + 3*i, 4)) show() doRun() |
MERKE DIR... |
In den Callback-Funktionen definierst du, was geschehen soll, wenn der Benutzer die Maustaste drückt, bzw. die Maus mit der gedrückten Maustaste verschiebt. Diese Funktionen werden beim Erzeugen des Spielfensters registriert und nicht vom Programm, sondern direkt vom System aufgerufen. |
ZUM SELBST LÖSEN |
|
![]() |
![]() |
![]() |