2 votes

Calcul des collisions d'un rectangle avec des lignes de chemin

J'ai cherché des échantillons et des tutoriels, mais je n'ai rien trouvé de spécifique.

Je suis en train de créer un jeu 2D XNA en C# et je veux détecter la position finale du joueur lorsqu'il atteint une ou plusieurs lignes de chemin, afin qu'il ne les croise pas.

Le joueur est constitué d'un rectangle de collision, les lignes de chemin sont toutes des segments. En gros, j'ai le rectangle de collision du joueur et le prochain rectangle de collision de la position du joueur. Si la prochaine position du joueur entre en collision avec les lignes de chemin, je veux trouver le déplacement maximum que le joueur peut subir.

L'image montre plus ou moins ce que je veux faire:

Image

Je veux trouver la position du rectangle rouge.

Est-ce que quelqu'un a un algorithme, une solution ou un lien qui pourrait m'aider? Même un échantillon serait utile.

0voto

Daniel B Points 1789

En supposant que vous avez déjà les moyens de vérifier si une boîte de collision spécifique contient une collision ou non, je recommanderais de faire une sorte de recherche binaire entre la position actuelle du joueur et la boîte de collision : choisissez un point à mi-chemin entre votre collision et la boîte de non-collision connue précédente. Testez à nouveau avec cette nouvelle boîte de collision. Si ce n'est pas une collision, choisissez un point à mi-chemin entre ce point et la boîte de collision connue, sinon choisissez un point à mi-chemin en arrière. Répétez jusqu'à ce que vous ayez trouvé une boîte non collisionnelle avec un niveau de précision qui vous satisfait (disons, de l'ordre de 1 à 2 pixels). Avec seulement quelques tests, vous devriez être capable de trouver un tel point.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X