| HomeTortue graphiqueGPanelRobotique WebTigerPython |
| Python - Online |
![]()
TU APPRENDRAS ICI... |
comment sélectionner précisément des Actors à l'aide de la souris. Contrairement à la fonction pressCallback() du chapitre précédent, qui détecte la cellule entière dans laquelle se produit un clic de souris, les méthodes du GGMouseListener permettent d'obtenir les coordonnées en pixels du clic. La méthode mouseTouched() du GGMouseTouchListener possède plusieurs paramètres :
Le GGMouseTouchListener est enregistré auprès de l'Actor à l'aide de la méthode addMouseTouchListener(). |
EXAMPLES |
| Example 1: Retirer des allumettes |
|
Les allumettes ne sont pas disposées dans une grille, mais peuvent être placées très près les unes des autres. Ce ne sont pas les cellules de la grille qui définissent la zone sensible au clic de souris, mais les images des sprites elles-mêmes. Avec l'instruction match.addMouseTouchListener (MouseTouched, GGMouse.lPress), the TouchListener un TouchListener est enregistré pour chaque allumette. Il réagit lorsque le bouton gauche de la souris est enfoncé. Dans la fonction mouseTouched(), tu définis ce qui doit se passer lorsqu'on clique sur l'Actor.
Programme: # 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() Example 2: Déplacer une voiture en maintenant le bouton de la souris enfoncé
Pour que la voiture s'oriente toujours dans la direction du déplacement, cette direction est calculée en permanence à partir de la difference entre les anciennes et les nouvelles coordonnées. On attend chaque fois que la distance entre l'ancien et le nouveau point dépasse 5 pixels. Programme: # 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() |
À RETENIR... |
| À l'aide du GGMouseTouchListener, tu obtiens les coordonnées en pixels du clic de souris et tu peux sélectionner précisément les Actors en cliquant directement sur leur image. Le déplacement des Actors en maintenant le bouton de la souris enfoncé s'effectue de manière continue. |
À FAIRE PAR TOI-MÊME |
|
![]()