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:
- une ou plusieurs boîtes de collision, décrivant la forme de l'objet pour rencontrer des objets;
- peut-être de nombreuses "boîtes d'attaque" qui n'apparaissent que lorsque vous êtes au milieu d'une attaque (et animez avec le sprite), peut-être même deux ou trois par arme, selon;
- quelques "boîtes vulnérables" qui subiront des dégâts lorsqu'elles seront touchées par les boîtes d'attaque des autres - par défaut, nous utilisons la boîte de collision, mais les boîtes vulnérables ont tendance à se sentir mieux lorsqu'elles sont plus petites que la boîte de collision, et nous pouvons autoriser pour les dommages liés à l'emplacement de cette façon
- une ou plusieurs "boîte d'activation" sur l'IA qui décrivent la région de détection de l'IA - elles attaqueront si le joueur se trouve dans cette région, par exemple.
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.