Comment puis-je définir une zone de collision complexe au-dessus d'une carte de tuiles?

13

Comme beaucoup de gens le recommandent, j'utilise l' éditeur de carte Tiled pour créer une carte pour mon jeu et c'est génial en particulier parce que le framework libgdx fournit également une API pour les cartes de Tiled.

Je comprends que je peux définir des tuiles collables ou non dans l'éditeur de carte afin que je puisse gérer toute collision dans mon code. Mais je suis actuellement dans une situation où je dois diviser une tuile en zones collidables et non collidables. Manuellement, je pense que je peux définir des points et des lignes de délimitation des deux zones et les traiter par programme. Mais cela demande beaucoup de temps.

J'ai donc beaucoup cherché sur Google et j'ai trouvé cet éditeur de physique physique. Cela semble être un excellent outil pour automatiser le processus que j'ai mentionné ci-dessus. Le système, cependant, fonctionne avec chacune des images décompressées et je ne suis pas sûr que cela fonctionnerait même si je décompresse l'image pour son fonctionnement.

Je me demande s'il n'y a pas de meilleure façon de faire tout ce processus de définition de la zone de collision. Toute suggestion sera très appréciée.

Tae-Sung Shin
la source

Réponses:

22

Comme d'habitude, je vais simplement jeter quelques idées sur la table. Il existe certainement plusieurs façons d'aborder ce problème. Je vais décrire les trois dont j'ai réussi à me souvenir, et c'est à vous de décider laquelle (le cas échéant) de ces approches est bonne pour votre projet.

Idée 1: motifs répétables dans vos carreaux

Votre système doit-il être suffisamment flexible pour prendre en charge toute zone de collision imaginable, ou pouvez-vous éventuellement le décomposer en un ensemble fini de formes de carreaux avec lesquelles vous pouvez construire et les traiter comme des cas spéciaux? Voici une paire de ressources pour lire sur cette idée:

Idée 2: ignorer le tilemap

Oui, ignorez complètement le tilemap et stockez une représentation polygonale différente de votre zone de collision. Superposez ensuite cette géométrie au-dessus de votre carte basée sur les tuiles et gérez les collisions avec elle. Si vous n'avez besoin d'aucune physique, consultez la ressource suivante:

Sinon, je pense que vous pourriez probablement utiliser l'outil auquel vous avez lié.

Idée 3: Détection parfaite de collision par pixel

Utilisez des collisions parfaites en pixels et utilisez un masque séparé ou simplement le canal alpha dans vos carreaux pour encoder vos zones de collision variables. Pour vous inspirer, consultez le guide suivant:

  • Physique dans Sonic - Solid Tiles

    Où la collision se fait directement contre des pixels de tuile comme celui-ci:

    entrez la description de l'image ici

    Et une réponse connexe qui pourrait également être pertinente ici .

David Gouveia
la source