J'ai toujours voulu créer un jeu de rôle 2D à l'ancienne comme Star Ocean, Final Fantasy, Sword of Mana et même la série «Tales of», et je suppose que beaucoup de gens le font. Mais avant même d'écrire une seule ligne de code, j'ai fait beaucoup de recherches, de dessins et d'essais.
J'ai trouvé presque toutes les réponses à mes questions, mais il y a un problème que je n'ai pas pu résoudre: comment créer une détection de collision réaliste mais simple , comme dans les jeux que j'ai nommés auparavant?
Je connais déjà plusieurs façons de calculer la détection de collision, regardez les exemples suivants:
Aucun de ceux-ci ne satisfait mes besoins.
- Les collisions à base de tuiles sont beaucoup trop simples et conviennent plus à un Zelda qu'à un Star Ocean. De plus, le dessin de chaque tuile doit remplir tout l'espace afin d'avoir l'air réaliste.
- Pixel perfect a trop de contraintes. Si votre tuile a des pixels ici et là, le joueur sera probablement coincé au milieu de nulle part (c'est-à-dire: dans certains jeux, vous êtes coincé sur une racine d'arbre de 2 pixels de largeur).
- Et les masques binaires utilisent trop de mémoire et de paramètres imo.
J'ai lu beaucoup de documentation mais je n'ai jamais trouvé quelque chose qui m'ait paru bien. Et tous mes essais ne ressemblaient pas à ce avec quoi je jouais. Donc, si vous avez de bons liens ou des didacticiels sur le fonctionnement du RPG 2D évolué, faites-le moi savoir.
la source
Réponses:
Les N Tutoriels peuvent vous aider ici. Certes, ils sont pour un jeu de plateforme de style arcade, mais ils fonctionneront tout aussi bien pour un RPG vue de haut en bas; n'appliquez tout simplement pas la gravité. Le principe teste la collision dans une collection de formes de base - cercles, boîtes englobantes alignées sur l'axe, lignes, points, etc.
Vous pouvez ensuite en quelque sorte décorer votre monde avec ceux-ci (peut-être via un éditeur de niveau personnalisé), ou les générer automatiquement (s'adapter à une boîte ou un cercle le plus proche) - ou les deux (par défaut, la boîte / le cercle généré automatiquement et permettre à un concepteur de modifier) .
Là où je travaille, nous avons réalisé pas mal de plateformes et quelques jeux d'exploration descendants. Nous les faisons depuis les jours de l'ACS. Nous utilisons le plus souvent des AABB pour les personnages et les objets, réglables dans un éditeur de sprites - et nous devenons fous ici, permettant une tonne de boîtes par sprite, certaines avec des objectifs différents. Nous pourrions avoir:
Les niveaux sont principalement des chaînes de segments de ligne; nous avons un peu de métadonnées par segment pour décrire les surfaces endommageantes ou glissantes, etc.
Ainsi, la plupart de la détection et de la réponse aux collisions devient AABB-vs-AABB ou AABB-vs-segment. Parfois, nous jetons un cercle contre quelque chose pour un projectile, bien que souvent un AABB fasse aussi bien ici.
Vous n'avez pas besoin de beaucoup de formes de base pour que les choses aient l'air bien et se comportent bien - quelques-unes suffiront, à condition que vous puissiez les modifier et les répéter.
Aussi, ne vous sentez pas mal à l'idée de mélanger les systèmes ensemble; les collisions basées sur les tuiles peuvent être excellentes dans certaines régions (représentant la majorité de votre monde) mais horribles pour les interactions objet-objet. C'est très bien; utilisez un système différent pour objet contre objet! Écrire pour les interactions entre les deux systèmes peut être plus facile que vous ne le pensez.
la source