[Canvas]fillRect solide [Résolu]

Signaler
Messages postés
64
Date d'inscription
jeudi 25 octobre 2018
Statut
Membre
Dernière intervention
12 septembre 2020
-
 Nanaki -
Bonjour je voudrais savoir comment rendre un fillRect "solid" pour que mon personnage puisse marcher dessus.

Merci de votre aide.

1 réponse

Salut,
pour faire ça il faut détecter la position des 2 éléments: le personnage et le rectangle concerné.
Si les positions sont cohérentes(abscisse et ordonnée) alors écrire la fonction qui permet le déplacement voulu et l'appliquer.

ça fait appel à 2 types de simulations très courantes en programmation:
_le test de collision(ou plutôt ici de superposition, tout dépends où est votre rectangle et comment arrive le personnage).
_la simulation de la physique réelle: un personnage marche sur des éléments il ne passe pas à travers. Il arrive sur des espaces sans éléments(sol) il tombe. C'est un peu vague(beaucoup) votre contexte et ester l'absence de sol ou la présence du sol peut s'avérer plus simple l'un ou l'autre selon ce contexte... Par exemple s'il marche il se peut qu'il y ait un sol(qui en 2d est plutôt rectangulaire s'il est plat) donc il faut plutôt tester s'il y a des trous pour le faire tomber.
Pour une compréhension simple vous pouvez simplement faire un mur et arrêter le personnage lorsque son côté avant (la position la plus à gauche + la longueur du personnage) touche ou dépasse le mur et interdire dans ce cas ce qui fait le déplacement.
Pour la hauteur c'est le même principe sauf que ce sont les coordonnées y.
Un fillRect n'a que très peu de rapport avec ça puisque c'est une méthode de dessin. Ce sont les coordonnées et dimensions de l'élément qu'il faut prendre en compte.
En 3D ce sera la même chose(je suppose que vous parlez de 2d mais comme vous ne précisez pas) sauf qu'on utilisera la coordonnée 2 qui correspond à la profondeur et qu'il faut tester non pas des zones délimités en x,y mais en x,y,z car ce sont ces types de polygones qui sont utilisés pour représenter ma 3D.

Si vous faites cela dans une boucle d'animation les tests et simulation des 'impacts' possibles ou non et les réactions qui en découlent(il y a une collision donc on n'empêche d'avancer ou de tomber) sont à faire à chaque tour de la boucle, avant le dessin du personnage bien sûr sinon ça reviendrais à le faire traverser la position d'un élément. D'une fois ce test effectué selon les critères de chaque élément 'solide' présent selon l'algorithme suivant:

POUR un déplacement de la droite vers la gauche
SI positon personnage(côté gauche)+longueur > ou = à position x du côté gauche de l'élément ALORS INTERDIRE DEPLACEMENT
POUR un déplacement VERS La droite
SI position personnage(côé droit)-longueur < ou = à position x du côté droit de l'élément
ALORS INTERDIRE DEPLACEMENT

Bien sûr en utilisant ET vous pouvez écrire ce test en une seule expression éventuellement sans avoir à tenir compte du sens de déplacement, il faut juste trouver l'astuce qui permet de tester que les surfaces ne sont pas superposée(d'où le nom test de collision)

même chose pour la hauteur avec les coordonnées y.

Un petit tuto ici en C# (il me semble) mais c'est le principe qui est intéressant et non le langage comme pour n'importe quel programme parce qu'il se ressemble tous plus ou moins(quand on en connait et comprend un on les comprends tous) et qu'un langage de programmation est un outil au service de ce que doit faire le programme:

https://zestedesavoir.com/tutoriels/2835/theorie-des-collisions/collisions-en-2d/formes-simples/

Vous pouvez voir par exemple la section pour faire un jeu Pong qui vous apprendra tout ce que vous devez savoir puisque une balle peut se déplacer horizontalement et verticalement et qu'il vaut vérifier si elle est au delà des limites du terrain(donc il y a point) ou doit rebondir sur la raquette(du joueur de gauche ou de celui de droite) à chaque fois, donc dans avant chaque animation de son déplacement pour déterminer si : le jeu s'arrête et place une autre balle, si l'une des 2 raquettes fait rebondir la balle et donc change son sens et son angle.
Oui Pong ça à beau dater mais il y avait déjà en germe tout les jeux vidéos modernes(de 1972 à nos jours) dans son concept ;)

Remplacez cela par le personnage tombe ou ne tombe pas et vous avez un jeu de plate-forme.