Comment un jeu fait tomber un objet
La gravité, dans un jeu, est un petit nombre ajouté à la vitesse d'un objet à chaque image. L'objet tombe donc de plus en plus vite, comme une pomme dans la vie réelle.
Savoir le calculer permet de régler la chute d'une balle, la hauteur d'un saut et la force d'un rebond avec quelques nombres.
À la fin de cette leçon
Remarque
Je peux calculer la vitesse et la position d'un objet qui tombe, image après image.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Position | l'endroit où se trouve l'objet, en pixels | |
| Vitesse | de combien de pixels la position change à chaque image | |
| Gravité | un nombre ajouté à la vitesse à chaque image | 0,15 |
| Rebond | le retour en arrière de la vitesse quand l'objet touche le sol | |
| Coefficient de rebond | la part de vitesse gardée après un rebond | 0,5 |
| Pas de temps | une image : la durée entre deux calculs |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La gravité change la vitesse, pas la position
À chaque image, un jeu fait deux additions dans cet ordre. D'abord la vitesse reçoit la gravité. Ensuite la position reçoit la vitesse.
La gravité ne déplace donc jamais l'objet directement. Elle le rend seulement plus rapide, et c'est la vitesse qui le déplace. Sur l'écran, y augmente vers le bas.
Exemple : une balle qui tombe
<pre id="sortie"></pre>Avant de lancer les Run
Remarque
Démarrez le labo et ouvrez le terminal. Le script fall.py suit une étoile du jeu pendant dix images. Il écrit des mots anglais : gravity est la gravité, speed est la vitesse, frame est l'image.
Suivre une étoile pendant dix images
docker exec jupyter python3 steps/fall.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Vérifier la vitesse après dix images
docker exec jupyter python3 -c "print(0.15 * 10)"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce que montrent les dix images
Le premier Run écrit d'abord la gravité, 0.15, puis dix lignes. La vitesse croît de 0.15 à chaque image et atteint 1.50 à la dixième. Le second Run le confirme : dix fois 0.15 font 1.5.
La hauteur ne croît pas au même rythme : 0.15, puis 0.45, puis 0.90. Elle atteint 8.25 à la dixième image. Chaque pas est plus grand que le précédent.
Un rebond renverse la vitesse
Quand la balle touche le sol, le jeu remet sa position au niveau du sol. Puis il inverse la vitesse et la multiplie par un coefficient de rebond, par exemple 0,5. La balle repart vers le haut, moins vite qu'elle n'est arrivée.
Avec un coefficient de 1, elle rebondirait toujours à la même hauteur. Avec 0, elle resterait collée au sol.
Exemple : une balle qui rebondit
| Image | Vitesse | Position | Ce qui se passe |
|---|---|---|---|
| 1 | 2 | 2 | elle tombe |
| 2 | 4 | 6 | elle tombe |
| 3 | 6 | 12 | elle tombe |
| 4 | 8 | 20 | elle touche le sol à 20, la vitesse devient -4 |
| 5 | -2 | 18 | elle remonte |
| 6 | 0 | 18 | sommet du rebond |
| 7 | 2 | 20 | retour au sol, la vitesse devient -1 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent que la gravité fait tomber l'objet du même nombre de pixels à chaque image. Faux : elle change la vitesse, donc la chute s'accélère. Pour une chute à vitesse constante, il faudrait ne jamais ajouter la gravité à la vitesse.