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?
collision-detection
isometric
jdeseno
la source
la source
Réponses:
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.
la source
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.
la source
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)
la source
Googler autour Je trouve cette démo: http://planetskill.com/iso/
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
la source
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.
la source
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;)
la source