Interagir avec la souris
Fondamental : Les 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
def setup():
size(400,400)
noStroke()
fill(0)
def draw():
background(255)
ellipse(200,200,2*r,2*r)
def mousePressed():
global r
if r<200:
r=r+5
# Initialisation des variables globales
r=10
Complément : Gestion 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
def setup():
size(400,400)
noStroke()
fill(0)
def draw():
background(255)
ellipse(200,200,2*r,2*r)
def mousePressed():
global r
r+=100
def mouseReleased():
global r
r-=100
# Initialisation des variables globales
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é.
Fondamental : Ré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
def setup():
size(400,400)
noStroke()
fill(0)
def draw():
background(255)
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
def setup():
size(200,200)
background(240)
def draw():
fill(val)
rect(75,75,50,50)
def mouseMoved():
global val
val += 5
if val>255:
val=0
# Initilisation des variables globales
val=0
Exemple :
Saisissez, analysez et testez ce code. Quelle différence y-a t-il avec l'exemple précédent ?
def setup():
size(200,200)
background(240)
def draw():
fill(val)
rect(75,75,50,50)
def mouseDragged():
global val
val += 5
if val>255:
val=0
# Initilisation des variables globales
val=0
Fondamental : Derniè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
def setup():
size(300,300)
background(240)
def draw():
pass
def mouseDragged():
line(pmouseX,pmouseY,mouseX,mouseY)
C'est incroyable ! Grâce à PyProcessing, en 7 lignes de code, nous avons créé un logiciel de dessin :)