Python

Faire rebondir une balle dans une fenêtre

La structure pour une animation

Dans Processing on utilise deux fonctions particulières : setup() et draw().

setup() est la fonction qui s'exécute au lancement du programme.

draw() est une fonction qui s'exécute en boucle (après le setup() ) et ce 60 fois par seconde.

MéthodeLa structure

Le programme ci-dessous affiche une fenêtre de pixels dans laquelle s'affiche une ellipse aux coordonnées (x,y) et de rayon r.

Remarque : Les variables x, y et r ont été déclarées en dehors des fonctions, ce sont des variables  "globales" . Pour pouvoir les utiliser dans une fonction, il faut spécifier qu'il s'agit des variables globales déclarées en en-tête avec l'instruction : global x,y,r.

1
x=50
2
y=100
3
r=10
4
5
def setup():
6
    size(300,200)
7
8
def draw():
9
    background(0,0,0)
10
    global x,y,r
11
    ellipse(x,y,2*r,2*r)

Remarque : Observer la structure de déclaration d'une fonction et l'indentation.

SimulationSimulation du mouvement de la balle 

Nous allons maintenant animer cela :

Lors de la création de la fenêtre ; 2 variables (non modifiables) sont automatiquement créées : ( width et height ) qui contiennent respectivement les valeurs 300 et 200.

Pour donner l'illusion de déplacement, nous allons ajouter à x une "vitesse" vx ( par exemple 2pixels) dans le draw(). Comme celui-ci s'exécute 60 fois par seconde, notre ellipse avancera de 120 pixels en 1 seconde.

De plus, lorsque la balle rentre en contact avec les bords droit ou gauche de la fenêtre on inversera le sens de déplacement.

1
x=50
2
y=100
3
vx=2
4
r=10
5
6
def setup():
7
    size(300,200)
8
9
def draw():
10
    background(0,0,0)
11
    global x,y,r,vx
12
    ellipse(x,y,2*r,2*r)
13
    x=x+vx
14
    if x<r or x>width-r:
15
        vx=-vx

Exercice : Modifiez ce programme pour que l'ellipse se déplace aussi verticalement et rebondisse sur les bords haut et bas de la fenêtre.

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Stéphan Van Zuijlen Licence de documentation libre GNURéalisé avec Scenari (nouvelle fenêtre)