Je travaille sur un éditeur de carte en mosaïque et je dois choisir automatiquement les tuiles en fonction des tuiles adjacentes. Par exemple, lorsque vous placez une tuile route, à côté d'une autre tuile route, les deux doivent être orientées de manière à former une route continue. S'il y a d'autres routes autour d'elles, nous devrons peut-être utiliser des tuiles d'angle ou d'intersection.
Quelqu'un peut-il recommander des algorithmes pour ce faire? Le jeu utilise une carte en mosaïque carrée à 8 directions.
Réponses:
C'est peut-être ainsi que cela se fait généralement. Vous avez votre liste de tuiles différentes qui représentent une tuile route dans toutes leurs orientations possibles. De gauche à droite, aux quatre coins, de haut en bas, peu importe. Vous allez maintenant indexer toutes ces tuiles avec un octet chacune. 8 bits, un pour chaque direction. Cela peut être dans une table de hachage ou par nom de fichier ... mais vous voulez le faire.
Vous avez donc ceci:
Le code d'octet pour la tuile ci-dessus est 00000000 . Ensuite, votre tuile qui va de gauche à droite (ou de droite à gauche) est comme ceci:
Le code d'octet de cette tuile est 10001000 , ou 136. Comme autre exemple, regardons une intersection à trois voies:
Le code d'octet de cette tuile est 10101000 .
Vous voyez probablement où je vais. Vous définissez des positions de bits dans l'octet représentant les connexions. C'est bien mieux que d'essayer de faire une grosse chaîne if / else que j'ai vue auparavant. Lorsque vous cherchez à placer une tuile, examinez les tuiles autour d'elle et créez un octet en cours de route. Définissez 1 pour les tuiles qui ont des routes (ou tout ce que vous cherchez à connecter) et 0 pour les tuiles qui n'en ont pas. Lorsque vous avez terminé, vous aurez le code d'octet pour la tuile exacte dont vous avez besoin.
Notez que lors de la création des actifs, vous pouvez en réutiliser beaucoup en tournant simplement et en lui affectant le code d'octet correct.
EDIT : images mises à jour pour être moins merdiques. Oui, c'est mieux qu'avant.
la source
Je vous recommande de jeter un œil à cette page pratique pour plus d'informations, car elle aborde en détail tous les aspects de ce que vous faites, ainsi que quelques optimisations potentielles: http://www.angryfishstudios.com / 2011/04 / aventures-dans-le-masquage /
Le tldr est que vous interrogez chaque cellule adjacente et stockez la combinaison dans un champ binaire / octet, puis la passez à travers une carte qui convertit un nombre de 0 à 255 en une valeur de 0 à 47, ce qui correspond à une image unique.
la source