Disons que nous faisons un jeu où nous pouvons abattre des monstres. Un monstre devrait mourir quand il est touché par une balle donc, nous devons vérifier la condition suivante :
le monstre est-il entré en collision avec la balle ?
Nous allons créé une fonction qui vérifie les collisions. Pour ça, nous avons besoin de savoir quand 2 rectangles se percutent.
J’ai créé une image avec 3 exemples :
Il est temps de mettre en marche ce cerveau de programmeur si ce n’est pas déjà fait. Que ce passe-t-il dans le 3ème exemple qui ne se produit pas dans les 2 premiers ? “Il y a collision”
Oui, mais vous devez être plus précis. Nous avons besoin d’informations que l’ordinateur peut utiliser.
Regardez la positions des rectangles. Dans le 1er exemple, le rouge n’est pas en collision avec le bleu parce que le rouge est trop loin sur la gauche. Si le rouge était un peu plus prêt sur la droite, ils pourraient se toucher. Jusqu’où exactement ? Et bien si le côté droit du rouge est plus loin que le coté gauche du bleu. C’est vrai pour l’exemple 3.
Mais c’est aussi vrai pour l’exemple 2. Nous avons besoin de plus de conditions pour être sur qu’il y ait collision. L’exemple 2 nous montre que nous ne pouvons pas aller trop loin vers la droite. À quelle distance exactement ? De combien le rouge devrait se déplacer sur la gauche pour qu’il y ait collision ? Lorsque le côté gauche rouge est plus loin que le côté droit de bleu.
Donc nous avons 2 conditions. Est-ce suffisant pour s’assurer d’une collision ?
Hé bien non, regardez l’image suivante :
Cette situation concorde avec nos conditions. Le côté rouge est plus loin que le côté droit du bleu et le côté gauche du rouge est plus loin que le côté gauche du bleu. Pourtant, il n’y a pas collision. C’est parce que le rouge est trop haut. Il doit bouger vers le bas. Mais de combien ? Jusqu’à ce que le côté inférieur du rouge soit plus loin que le côté supérieur du bleu.
Mais si nous le bougeons trop loin, il n’y aura pas de collision non plus. Jusqu’où le rouge peut-il descendre pour qu’il y ai collision avec le bleu ? Tant que le coté supérieur du rouge est plus haut que le coté inférieur du bleu.
Nous avons maintenant 4 conditions. Sont-elles vraies pour ces 3 exemples ?
Le côté droit du rouge est plus loin que le côté gauche du bleu.
Le côté gauche du rouge est plus loin que le côté droit du bleu.
Le côté inférieur du rouge est plus loin que le côté supérieur du bleu.
Le côté supérieur du rouge est plus haut que le côté inférieur du bleu.
Oui, ils le sont !
Maintenant, nous devons transformer ces informations en une fonction.
D’abord, créons 2 rectangles :
|
|
Maintenant, nous créons une nouvelle fonction appelée checkCollision() avec les 2 rectangles comme paramètres :
|
|
D’abord, nous avons besoin des côtés des rectangles. Le côté gauche est la position x et le côté droit est la position x + la largeur. Même chose avec y et la hauteur :
|
|
Maintenant, nous avons les 4 cotés de chaque rectangle. Nous pouvons les utiliser pour mettre nos conditions dans des if :
|
|
Bien, nous avons notre fonction. Essayons ! Nous dessinons les rectangles pleins ou délimités par des lignes :
|
|
Ça marche !
Maintenant, vous savez comment détecter la collision entre 2 rectangles.
Résumé
La collision entre 2 rectangles peut être vérifié avec 4 conditions
A et B sont 2 rectangles et il y a collision quand les 4 conditions suivantes sont vérifiées :
- Le côté droit du A est plus loin que le côté gauche du B
- Le côté gauche du A est plus loin que le côté droit du B
- Le côté inférieur du A est plus loin que le côté supérieur du B
- Le côté supérieur du A est plus haut que le côté inférieur du B