HomeTortue graphiqueGPanelRobotique WebTigerPython
 Python - Online
mausevents2
Deutsch   English   Français   

9. ÉVÉNEMENTS DE LA SOURIS II

 

 

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 :

  • actor : l'Actor sur lequel tu cliques.

  • mouse : un objet de la classe GGMouse.

  • spot : un point contenant les coordonnées relatives du clic de souris par rapport à l'image du sprite.

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()
► Copy to clipboard

Example 2: Déplacer une voiture en maintenant le bouton de la souris enfoncé

La voiture est déplacée à l'aide de la souris. Son image s'oriente toujours dans la direction du déplacement. Tu utilises le MouseListener de la classe GGMouseListener. Comme Python permet l'héritage multiple, la classe Car peut hériter à la fois de la classe Actor et de la classe GGMouseListener. La méthode de rappel mouseEvent() est définie dans la classe Car.

 

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()
► Copy to clipboard

 

 

À 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

 

1.

Les boules rouges doivent disparaître lorsqu'on clique dessus avec la souris.

a) Résous cet exercice à l'aide de pressCallback(), comme dans l'exemple 3 du chapitre précédent.

b) Résous ensuite le même exercice à l'aide du GGMouseTouchListener, comme dans l'exemple 1.

 
 

2.
Ces 10 extraterrestres doivent également être éliminés par un clic de souris.
 
Résous cet exercice en utilisant les coordonnées en pixels à l'aide du GGMouseTouchListener.
       alien = Actor("sprites/alien.png")

Pour créer les extraterrestres, utilise :
for i in range(10):    
    addActor(alien, Location (30 + 60 * i, 60))
 

 



.