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

8. ÉVÉNEMENTS DE LA SOURIS

 

 

TU APPRENDRAS ICI...

 

comment utiliser les événements de la souris pour déclencher des actions. Ces événements jouent un rôle très important dans les jeux interactifs. Dans des fonctions appelées fonctions de rappel (callbacks), tu définis ce qui doit se passer lorsqu'un bouton de la souris est enfoncé ou relâché, ou lorsque la souris est déplacée. Ces fonctions ne sont pas appelées directement par ton programme, mais automatiquement par le système lorsqu'un événement de la souris se produit.

 

 

EXAMPLES

 

 

Example 1: Créer un nouveau poisson en cliquant avec la souris
 

La fonction de rappel pressCallback()est définie comme une fonction globale. Lorsqu'un bouton de la souris est enfoncé, les coordonnées du clic sont déterminées à l'aide de e.getX() und e.getY() . Un objet de la classe Fish est alors créé à cette position. La fonction de rappel est enregistrée comme paramètre lors de la création de la fenêtre de jeu.

C'est un bon exemple de programmation orientée objet, car chaque nouveau poisson est une instance de la classe Fish et « sait » comment il doit se déplacer.

 

Programme:

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

Example 2: Déplacer des boules en maintenant le bouton de la souris enfoncé

Dispose les boules sur une même ligne. Lorsque tu les fais glisser en maintenant le bouton de la souris enfoncé, les personnages se déplacent par sauts d'une cellule à l'autre. Tu utilises deux fonctions de rappel pressCallback() et dragCallback().
La fonction pressCallback() function permet de déterminer la position du clic de la souris et de mémoriser dans la variable actor l'Actor qui se trouve dans cette cellule. La fonction dragCallback()permet de déplacer l'Actor lorsque le bouton de la souris est maintenu enfoncé.

 

Comme la variable actor est utilisée dans les deux fonctions, elle doit être déclarée comme variable global. Les deux fonctions de rappel sont enregistrées lors de la création de la fenêtre de jeu.

Programme:

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

Example 3: Déplacer des objets de manière continue
Dans l'exemple 2, le personnage se déplace par sauts d'une cellule à l'autre lorsqu'on le fait glisser avec la souris. Il est parfois plus élégant de déplacer les objets de manière continue et de les positionner exactement dans une cellule de la grille lorsqu'on relâche le bouton de la souris. Au début, 7 boules sont réparties au hasard dans la fenêtre de jeu. À l'aide de la souris, tu dois les déplacer dans les 7 cellules situées sur la diagonale.

Tu utilises trois fonctions de rappel : pressCallback() , dragCallback() et releaseCallback(). In presCallback().Dans pressCallback(), la position du clic de la souris et la boule qui se trouve à cette position sont déterminées. Dans dragCallback(), la méthode setLocationOffset() permet de déplacer la boule de manière continue lorsque le bouton de la souris est maintenu enfoncé. Dans releaseCallback(), la boule est placée au centre of celllorsque le bouton de la souris est relâché.
Pour que les variables actor et startLoc puissent être utilisées dans plusieurs fonctions de rappel, tu dois les déclarer comme variables global.
 

Programme:

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

 

 

À RETENIR...

 

Dans les fonctions de rappel, tu définis ce qui doit se passer lorsque l'utilisateur appuie sur un bouton de la souris, déplace la souris en maintenant le bouton enfoncé ou relâche le bouton. Ces fonctions sont enregistrées lors de la création de la fenêtre de jeu. Elles ne sont pas appelées directement par le programme, mais automatiquement par le système.

 

 

À FAIRE PAR TOI-MÊME

 

1.

Faire éclater des ballons
Dans une fenêtre de jeu avec un fond bleu, crée 20 ballons à des positions choisies au hasard en utilisant le sprite balloon.gif.

Les ballons doivent pouvoir être détruits d'un simple clic de souris.

 
 

2.

Déplacer des ballons avec la souris
Comme dans le premier exercice, crée 20 ballons à des positions choisies au hasard. Définis une fonction de rappel pressCallback(e) qui permet de sélectionner un ballon avec la souris, ainsi qu'une fonction de rappel dragCallback(e) qui permet de déplacer le ballon sélectionné. Déplace ensuite tous les ballons de manière à ce qu'ils soient disposés dans les deux premières lignes de la grille.

 
 

 

3.

Faire descendre des ballons
Crée une fenêtre de jeu comportant 20 cellules horizontales et 20 cellules verticales, chacune d'une taille de 30 pixels, avec l'image de fond "sprites/town.jpg". À chaque clic de souris, un ballon est créé à la position du clic. Les ballons doivent ensuite se déplacer vers le bas. Dans la classe Balloon, définis une méthode act(self) dans laquelle la direction du déplacement est fixée à l'aide de self.setDirection(90).