J'essayais d'implémenter un cheminement simple, mais le résultat est moins satisfaisant que ce que j'avais l'intention de réaliser. Le truc, c'est que les unités dans des jeux comme Starcraft 2 se déplacent dans toutes les directions alors que les unités dans mon cas ne se déplacent que dans au plus 8 directions (style Warcraft 1) car ces 8 directions dirigent vers les prochains nœuds disponibles (elles se déplacent d'une tuile à la tuile voisine suivante) . Que dois-je faire pour obtenir le résultat comme dans Starcraft 2? Réduire la taille des carreaux?
Sur l'image, vous pouvez voir une ligne horizontale de carreaux de roche constituant des obstacles et le chemin trouvé marqué comme des carreaux verts. La ligne rouge est le chemin que je veux atteindre.
la source
Réponses:
Pour un bon algorithme de recherche de chemin, l'utilisation de A * serait probablement une bonne idée, cependant, pour un jeu simple qui ne nécessite pas de recherche de chemin sophistiquée, efficace ou efficace, simplement en faisant avancer les personnages vers une cible en trouvant la direction de l'objectif devrait être suffisant.
Vous pouvez faire est de générer un «graphique de visibilité» (quels autres points sont visibles à partir de chaque point) à partir des sommets, puis effectuez A * sur le graphique. Cela fonctionne car le chemin le plus court se trouvera toujours sur le graphique de visibilité.
Réduire la taille des carreaux peut vous aider.
Ressources
Lectures complémentaires
EDIT: J'aime le commentaire de @ MarkusvonBroady.
Ressources
De @MarkusvonBroady
J'ai fait une recherche, trouvez les éléments suivants (ceux-ci peuvent vous aider)
la source
À partir d'une extrémité du chemin brut, par exemple
path[0]
, vous pouvez supprimerpath[1]
si le segment formé en joignant les points depath[0]
etpath[2]
ne coupe aucun mur. Aller plus loin jusqu'au dernier segment fournira un chemin plus simple.Cela permettra non seulement de lisser le chemin mais aussi de supprimer certains points inutiles, comme un exemple de tir, 3 segments consécutifs d'une ligne droite.
la source