Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Détecter une collision entre deux objets

Après cette leçon: Je peux écrire le test qui dit si deux rectangles ou deux cercles se touchent.

Leçon de 70 min2 commandesLab de développement de jeux : boucle de jeu, gravité et collisions dans le navigateur

Comment un jeu repère une collision

Une collision, c'est le moment où deux objets d'un jeu se touchent : une balle frappe un mur, un joueur ramasse une pièce. Un jeu ne voit pas les dessins, il compare des nombres.

Savoir écrire ce test permet de faire attraper une étoile, perdre une vie ou rebondir une balle, sans jamais lire l'écran.

À la fin de cette leçon

Remarque

Je peux écrire le test qui dit si deux rectangles ou deux cercles se touchent.

Mots clés

MotCe que ça veut direExemple
Collisionle moment où deux objets se touchent
Rectangle englobantla boîte, alignée sur les axes, qui entoure un objet
Chevauchementune partie commune entre deux formes
Rayonla distance du centre d'un cercle à son bord5
Distancela longueur entre deux points5
Axeune direction de l'écran : x en travers, y vers le bas

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Chaque objet est une boîte de quatre nombres

Dans un jeu, chaque objet a une boîte rectangulaire. Quatre nombres la décrivent : x et y pour le coin en haut à gauche, puis la largeur et la hauteur.

Sur l'écran, y augmente vers le bas. Le coin droit de la boîte est à x + largeur, et son bord bas est à y + hauteur.

Deux boîtes se chevauchent sur les deux axes

Deux boîtes se touchent quand leurs intervalles se recouvrent sur les deux axes à la fois. Sur l'axe x, chacune doit commencer avant la fin de l'autre. Sur l'axe y, c'est la même chose.

Si un seul axe est séparé, les boîtes sont séparées. Des boîtes qui partagent seulement un bord ne se chevauchent pas.

Exemple : le test de chevauchement

Code: web
<pre id="sortie"></pre>

Avant de lancer les Run

Remarque

Démarrez le labo et ouvrez le terminal. Le script collide.py teste six paires de boîtes. Il écrit des mots anglais : apart veut dire séparées, overlapping veut dire qui se chevauchent, et il répond True ou False.

Tester six paires de boîtes

Commande
docker exec jupyter python3 steps/collide.py

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.

Calculer un carré de distance

Commande
docker exec jupyter python3 -c "print(3 ** 2 + 4 ** 2)"

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 six paires

Le premier Run écrit six lignes. Les paires overlapping, one inside the other et one corner inside donnent True. Les paires apart, edges touching et same column, far apart donnent False.

Notez le cas où les bords se touchent : c'est False. Le jeu du labo compte une collision seulement quand les boîtes se recouvrent un peu.

Deux cercles : comparer la distance aux rayons

Pour un cercle, la boîte est trop large aux coins. On compare plutôt la distance entre les centres à la somme des rayons. Deux cercles se touchent si la distance est plus petite que cette somme.

Pour éviter une racine carrée, on compare les carrés : dx² + dy² doit être plus petit que (r1 + r2)². Le second Run donne 25, le carré de la distance 5 pour un décalage de 3 et 4.

Exemple : trois paires de cercles

Cercle 1 (x, y, rayon)Cercle 2 (x, y, rayon)dx² + dy²(r1 + r2)²Collision
(0, 0, 5)(8, 0, 5)64100oui
(0, 0, 5)(10, 0, 5)100100non, ils se frôlent
(0, 0, 2)(6, 8, 3)10025non

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup croient qu'il suffit de comparer x pour savoir si deux objets se touchent. Faux : deux objets peuvent avoir le même x et être très loin l'un de l'autre en hauteur. Testez toujours les deux axes, et combinez les deux résultats avec un et.

À propos de ce labo et de sa source: Lab de développement de jeux : boucle de jeu, gravité et collisions dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.