Comment gérer la détection de collision isométrique?


14

Je voudrais faire un jeu de plateforme de style run-jump isométrique. Le joueur doit être capable de sauter sur les plates-formes au-dessus du sol, de frapper le côté des objets, etc.

Je vais utiliser un moteur de jeu 2D, donc je ne voudrais pas émuler une collision 3D complète pour les dimensions que je n'utilise pas.

Je pense que les objets du jeu doivent être placés en utilisant: X, Y, largeur, hauteur et Z pour la profondeur.

En utilisant ces valeurs, comment dois-je détecter les collisions?


Je sais que c'est une sorte de question générale, mais j'aimerais des réponses plus détaillées ou des liens vers de bonnes ressources d'apprentissage.
jdeseno

Réponses:


19

2 options:

  • Vous pouvez le traiter comme un jeu 3D avec une caméra orthographique fixe. Ensuite, vous pouvez utiliser toutes les ressources / livres / tutoriels / bibliothèques de jeux 3D standard. Même s'il était rendu en 2D avec des sprites, les calculs pour le mouvement, etc. seraient toujours en 3D derrière la scène. Cela vous donnerait les résultats les plus précis.

  • Vous pouvez le traiter comme un jeu 2D de haut en bas, avec une propriété de hauteur supplémentaire. Par exemple, imaginez une grille 2D où chaque tuile a une valeur de hauteur. Lorsque vous passez d'une tuile à une autre, vous ne laissez passer un personnage sur une tuile particulière que si les pieds du personnage sont au-dessus ou égaux à la hauteur de cette tuile, mais s'ils sautent et que la gravité les fait descendre sur une tuile, vous laissez-les y rester. Avec un peu plus de travail, vous pourriez le faire pour pouvoir passer sous les ponts, etc.


4

Il existe de nombreuses façons de simplifier cela. Par exemple, si vous n'autorisez pas les calques (par exemple, un pont sur lequel vous pouvez à la fois marcher dessus et dessous, vous pouvez effectuer toute la détection de collision dans les dimensions X / Y, où vous filtrez l'ensemble de collision à n'importe quelle hauteur + profondeur) ou plus.


2

Si le jeu est basé sur une grille rectangulaire, cette grille définit vos axes X / Y. Et Z peut être utilisé pour la hauteur.

Les collisions sont alors plus ou moins aussi faciles que n'importe quel jeu 2D à base de tuiles.

Il vous suffit ensuite de reconvertir la grille en coordonnées d'écran isométriques pour le rendu. C'est assez simple - mais vous devrez peut-être penser au calcul des valeurs de «profondeur», à des fins de tri (rendu de la scène isométrique de l'arrière vers l'avant)


Utiliser Z pour la hauteur va à l'encontre de l'instinct, mais c'est la bonne chose à faire sur les jeux 2D descendants. vous pouvez ensuite réutiliser le code entre les jeux latéraux et descendants.
Iain

2

Googler autour Je trouve cette démo: http://planetskill.com/iso/

WASD pour se déplacer. Barre d'espace pour sauter

Il implémente uniquement la collision avec l'axe haut / bas, mais l'ajout de l'autre collision devrait être facile:

Si la position haut / bas de l'étape suivante est supérieure à votre maximum, ne bougez pas. Cela devrait également vous permettre d'implémenter le saut de manière simple.

Exemple de code ici: http://gist.github.com/478997


2

Tout ce qui précède. L'isométrique n'est qu'une grille 2D cisaillée, alors traitez-la comme un tilemap 2D et pensez à un moyen de coder la profondeur. Comment feriez-vous cela dans un jeu 2d normal (être capable de passer derrière ou devant des blocs en sautant? Vous stockez soit une profondeur par tuile (tampon de profondeur -> tampon z) ou vous utilisez plusieurs couches , ou, si vous voulez plus sophistiqué, vous implémenteriez un rappel par type de tilet (ou mapposition) et seriez en mesure de faire ce que vous voulez, vérifier la profondeur, vérifier l'équipement, déformer le lecteur, faire déplacer lentement le lecteur, formater HD.


Bonne réponse Kaj - ceci étant le nœud du problème, je suis surpris que personne d'autre n'ait soulevé la question. C'est toujours la chose qui confond les débutants en isométrie, en ce qui concerne la physique.
Ingénieur

1

Eh bien, vous pourriez avoir une couche de collision distincte au-dessus de votre niveau qui n'est pas visible et l'utiliser pour vérifier la collision .. Vous pouvez également l'utiliser pour plusieurs couches tant que vous savez sur quelle couche se trouve le joueur;)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.