Bonjour,
j'ai quelques soucis pour utiliser le a* pathfinding sur une square isometric map.
Voici le résultat :
Je ne sais pas réellement par où commencer pour résoudre mon problème, pour une map carré ou diamond isometric map il n'y a aucun soucis vu que c'est le même algo de base qu'il faut utiliser. Par contre pour une square isometric map ce n'est pas réellement la même chose...
Dans mon image le point bleu signifie le point de départ et les points rouges signifient le chemin du a*. Les points noirs sont dérivés du chemin a*. Mais le résultat ne me plaît pas du tout, j'aimerais savoir aller en diagonal(n-e, s-e, s-w, n-w). Mais je ne sais pas trop comment m'y prendre.
Devrais-je d'abord transformer "ma map" en "map normal", calculer l'a*, puis mettre la "map normal" en "ma map" ?
Je suis un peu perdu pour tout ceci, sachant que je ne trouve pas grand chose sur Google. On trouve beaucoup de sujets sur l'a* en map carré un peu moins en map isométrique et beaucoup moins en map isométrique carré.
Auriez-vous des pistes, idées ou autre à me conseiller ?
Merci d'avance !
MDA.
J'arrive pas a comprendre en quoi le fait que ce soit une vue iso' change quelque chose, t'as quand au final juste un tableau 2d de case.
Je ne sais pas comment ton a* est ecrit. Mais il y a certainement un endroit qui decrit "le voisinage" d'une case. Il faut changer ce bout de code pour inclure les diagonales.
On peut se déplacer horizontalement et verticalement (donc en passant par le coin des carrés) pour le même coût ?
Parce que habituellement dans les JV c'est pas le cas, à moins d'utiliser des octogones je suppose
Ptet pour ça que ça paraît bizarre aussi vu qu'en passant par les "coins" le coût serait le même même si a l'écran on a l'impression de faire un détour pas naturel
En general il faut metre un cout de sqrt(2) sur les diagonales pour avoir un mouvement raisonnable.
Merci de vos réponses.
En faites j'utilise Slick et il y a déjà un a* programmé de base. J'avais déjà lu cette classe et essayé de changé le voisin d'une cellule mais ça ne fonctionnait pas... Mais j'ai regardé d'un peu plus près et en réalité il y a quelques conditions à respecter que je n'avais pas vu d'assez près !
Cependant je ne trouve toujours pas de résultats concluant à l'idée que j'avais en tête.
Je cherche à reproduire le même style de pathfinding que sur Dofus. Où il préfèrent aller en diagonal que par ligne vertical.
J'espère savoir modifier cette classe pour que je n'ai pas à réécrire un algo a* quand il y en a un déjà fourni.
Bof, pour ce genre de truc je trouve ça mieux personnellement de le faire soit-même plutôt que d'utiliser un truc déjà tout fait, c'est pas du tout compliqué a implémenter et ça permet une meilleur compréhension au final.
M'enfin chacun fait comme il veut après.
Je crois que c'est ce que je vais faire je n'arrive pas à un beau résultat...
Il suffirait de modifier quatre lignes dans la plupart des algorithmes A* pour gérer les diagonales.
Pour ceux qui aimeraient voir comment Slick gère l'a* voici les source : https://github.com/ariejan/slick2d/blob/master/src/org/newdawn/slick/util/pathfinding/AStarPathFinder.java
".java"
même avec des gant je clique pas moi. Mais sinon l'implémentation est surement la même que partout ailleurs..
No soucis du lien ça vient de github.com
( https://www.google.be/search?q=slick+astarpathfinding+git&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fr:official&client=firefox-a&channel=sb&gfe_rd=cr&ei=lDdMU_-8DsGujwfIv4D4Bw#channel=sb&q=slick+astar+pathfinding+git&rls=org.mozilla:fr:official&spell=1 )
Vintrigue C'est un lien github hein .
"".java""
Je veut dire: le java je touche pas à ça moi c'est pas un problème de sécurité que j'avais, juste que je n'aime pas être en contact avec de la matière fécale
C'est juste un troll anti java, circulez
un programmeur raisonné anti-java*, merci
Bon je viens d'ouvrir cet excrément et visiblement, ligne 146, t'as un booléen "allowDiagMovement" qui devrait regler ton problème directement.
http://sournoishack.com/u/uploads/752460854diahrree.jpg
stop essayer de pourrir le topic
bon c'est bien tu t'es un peu rattrapé