Interagir avec la souris

FondamentalLes 4 fonctions de base

En ce qui concerne la souris, PyProcessing propose 4 fonctions qui devront être complétées par le programmeur :

  • le code se trouvant dans la fonction mousePressed() est exécuté une fois quand l'utilisateur appuie sur un des boutons de la souris

  • le code se trouvant dans la fonction mouseReleased() est exécuté une fois quand un bouton de la souris qui avait été préalablement pressé est relâché.

  • le code se trouvant dans la fonction mouseMoved() est exécuté à chaque image tant que la souris se déplace

  • le code se trouvant dans la fonction mouseDragged() est est exécuté à chaque image tant que la souris se déplace et que le bouton de la souris est enfoncé.

Ces 4 fonctions ne prennent aucun paramètre et ne retournent aucune valeur.

Attention

pour pouvoir utiliser les 4 fonctions que nous venons de voir, il faut que la fonction draw() soit présente dans le programme (même si elle ne contient que le mot clé pass)

Exemple

Saisissez, analysez et testez ce code

1
def setup():
2
    size(400,400)
3
    noStroke()
4
    fill(0)
5
6
def draw():
7
    background(255)
8
    ellipse(200,200,2*r,2*r)
9
    
10
def mousePressed():
11
    global r
12
    if r<200:
13
        r=r+5
14
15
# Initialisation des variables globales    
16
r=10

ComplémentGestion de la variable globale

Remarquez que ce programme utilise une variable globale r pour transmettre l'information du rayon du cercle d'une fonction à l'autre.

  • La variable r est initialisée dans le corps principal du programme, hors de toute fonction.

  • L'information est exploitée en lecture par la fonction draw(). Dans ce cas, il n'y a rien à faire de particulier, la fonction accède à la variable directement par son nom.

  • L'information est exploitée en modification par la fonction mousePressed(). Dans ce cas, il est obligatoire de commencer la fonction par la ligne global r afin que la modification faite par la ligne r=r+5 soit bien écrite dans la variable globale r.

Exemple

Saisissez, analysez et testez ce code

1
def setup():
2
    size(400,400)
3
    noStroke()
4
    fill(0)
5
6
def draw():
7
    background(255)
8
    ellipse(200,200,2*r,2*r)
9
    
10
def mousePressed():
11
    global r
12
    r+=100
13
def mouseReleased():
14
    global r
15
    r-=100
16
17
# Initialisation des variables globales    
18
r=10

Complément

Ce programme est pratiquement identique au précédent. On y fait les mêmes remarques concernant l'usage de la variable globale r.

On remarquera le raccourci syntaxique

  • r+=100 qui équivaut à r=r+100

  • r-=100 qui équivaut à r=r-100

Exercice 20 : Le carré vert

Créez un programme permettant d'afficher un carré vert au centre de la fenêtre. En cas d'appui sur un bouton de la souris le carré devient rouge. Ce même carré redevient vert dès que le bouton de la souris est relâché.

FondamentalRécupérer la position de la souris

Il est possible de connaître les coordonnées du curseur de la souris grâce aux variables proposées par PyProcessing : mouseX et mouseY

Exemple

Saisissez, analysez et testez ce code

1
def setup():
2
    size(400,400)
3
    noStroke()
4
    fill(0)
5
6
def draw():
7
    background(255)
8
    ellipse(mouseX,mouseY,30,30)

Exercice 21 : Les carrés multicolores

Créez un programme qui permettra d'afficher un nouveau carré de coté 20 pixels à chaque clic de souris (sans effacer les carrés déjà présents). Le centre du carré devra se trouver au niveau du pointeur de la souris au moment du clic. La couleur du carré devra être aléatoire.

Exercice 22 : Le bouton

Créez un programme qui permettra d'obtenir ceci :

Cliquez uniquement dans le rectangle rouge.

Indications :

  • Le canevas a une taille de 300x300 pixels

  • Le rectangle a une taille de 200x100 pixels

  • N'oubliez pas le texte au centre du rectangle !

Exemple

Saisissez, analysez et testez ce code

1
def setup():
2
    size(200,200)
3
    background(240)
4
5
def draw():
6
    fill(val)
7
    rect(75,75,50,50)
8
9
def mouseMoved():
10
    global val
11
    val += 5
12
    if val>255:
13
        val=0
14
        
15
# Initilisation des variables globales
16
val=0

Exemple

Saisissez, analysez et testez ce code. Quelle différence y-a t-il avec l'exemple précédent ?

1
def setup():
2
    size(200,200)
3
    background(240)
4
5
def draw():
6
    fill(val)
7
    rect(75,75,50,50)
8
9
def mouseDragged():
10
    global val
11
    val += 5
12
    if val>255:
13
        val=0
14
        
15
# Initilisation des variables globales
16
val=0

FondamentalDernière position de la souris

Si mouseX et mouseY vous donnent la position de la souris à un instant donné, pmouseX et pmouseY vous permettent d'avoir les coordonnées précédentes de la souris, juste avant son dernier mouvement. Cela s'avère extrêmement pratique si on veut par exemple réaliser un logiciel de dessin à la souris.

Exemple

Saisissez, analysez et testez ce code

1
def setup():
2
    size(300,300)
3
    background(240)
4
5
def draw():
6
    pass
7
8
def mouseDragged():
9
    line(pmouseX,pmouseY,mouseX,mouseY)

C'est incroyable ! Grâce à PyProcessing, en 7 lignes de code, nous avons créé un logiciel de dessin :)