HomeTurtlegrafikGPanelRobotikGameGrid WebTigerPython |
Python - Online |
DU LERNST HIER... |
wie du mit der Maus Die Actors nicht nur sprunghaft von Zelle zur Zelle, sondern kontinuierlich bewegen kannst. Im Unterschied zum pressCallback() im vorhergehenden Kapitel, der die Zelle des Mausklickst erfasst, erhältst du mit den Methoden des GGMouseListeners die Pixelkoordinaten des Mausklicks. Die Methode mouseTouched() des GGMouseTouchListeners enthält mehrere Parameter: Der GGMouseTouchListener wird mit addMouseTouchListener() beim Actor registriert. |
MUSTERBEISPIELE |
Beispiel 1: Zündhölzer wegnehmen |
Die Zündhölzer sind nicht im Gitter angeordnet, sondern beliebig nah aneinander. Nicht die Gitterzellen, sondern die Sprite-Bilder legen das für den Mausklick aktive Gebiet fest. mit match.addMouseTouchListener(MouseTouched, GGMouse.lPress) wird der TouchListener wird bei jedem Zündholz registriert und reagiert auf das Drücken der linken Maustaste. In der Funktion mouseTouched() gibst du an, was beim Mausklick auf den Actor geschehen soll. Programm: # Gg9.py from gamegrid import * def mouseTouched(actor, mouse, spot): actor.removeSelf() makeGameGrid(600, 120, 1, False) nbMatches = 20 for i in range(nbMatches): match = Actor("sprites/match.gif") addActor(match, Location (12 + 30 * i, 60)) match.addMouseTouchListener(mouseTouched, GGMouse.lPress) show() doRun() Beispiel 2: Ein Auto mit der gedrückten Maustaste bewegen.
Damit sich das Auto immer in die Bewegungsrichtung dreht, wird laufend die Bewegungsrichtung aus der Differenz der alten und neuen Koordinaten berechnet. Dabei wartet man immer, bis der Abstand zwischen dem alten und neuen Punkt grösser als 5 Pixel ist. Programm: # Gg9a.py from gamegrid import * import math # --------------------- class car -------------------------- class Car(Actor, GGMouseListener): def __init__(self): Actor.__init__(self, True, "sprites/redcar.gif") self.oldLocation = Location() def mouseEvent(self, e): location = toLocationInGrid(e.getX(), e.getY()) self.setLocation(location) dx = location.x - self.oldLocation.x; dy = location.y - self.oldLocation.y; if dx * dx + dy * dy < 25: return True phi = math.atan2(dy, dx) self.setDirection(math.degrees(phi)) self.oldLocation = location # --------------------- main --------------------------------- makeGameGrid(600, 600, 1, False) setTitle("Move car using mouse drag") setSimulationPeriod(50) setBgColor(Color.gray) car = Car() addActor(car, Location(50, 50)) addMouseListener(car, GGMouse.lDrag) show() doRun() |
MERKE DIR... |
Mit Hilfe vom GGMouseTouchListener erhältst du die Pixelkoordinaten des Mausklicks und kannst die Actors exakt mit Klick auf das Spritebild erfassen. Die Verschiebung der Actors mit der gedrückten Maustaste erfolgt kontinuierlich. |
ZUM SELBST LÖSEN |
|
![]() |
![]() |
![]() |