| HomeTurtlegrafikGPanelRobotikGameGrid WebTigerPython |
| Python - Online |
![]()
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 = toLocation(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: Objekte kontinuierlich bewegen
Programm: #Gg8b.py from gamegrid import * def pressCallback(e): global actor, startLoc startLoc = toLocationInGrid(e.getX(), e.getY()) actor = getOneActorAt(startLoc) def dragCallback(e): if actor == None: return startPoint = toPoint(startLoc) actor.setLocationOffset(e.getX() - startPoint.x, e.getY() - startPoint.y) def releaseCallback(e): if actor == None: return destLoc = toLocationInGrid(e.getX(), e.getY()) actor.setLocationOffset(0, 0) actor.setLocation(destLoc) makeGameGrid(7, 7, 70, Color.red, False, mousePressed = pressCallback, mouseDragged = dragCallback, mouseReleased = releaseCallback) setTitle("Sort Balls") for i in range(7): ball = Actor("sprites/marble.png") addActor(ball, getRandomEmptyLocation()) actor = None startLoc = None show() doRun() |
MERKE DIR... |
| In den Callback-Funktionen definierst du, was geschehen soll, wenn der Benutzer die Maustaste drückt, die Maus mit der gedrückten Maustaste verschiebt oder die Maustaste loslässt. Diese Funktionen werden beim Erzeugen des Spielfensters registriert und nicht vom Programm, sondern direkt vom System aufgerufen. |
ZUM SELBST LÖSEN |
|
![]()