|
Zoglu |
Posté le 19 Jan 2009 à 18:44 |

Messages : 366
|
Il y a un objet Pathfinder dans MMF2, qui utilise l'algo A*, donc pas besoin de trop te fouler
Si tu ne l'as pas, tu la trouveras dans ce pack.
|
|
Darktib |
Posté le 19 Jan 2009 à 16:01 |

Messages : 4017
|
Cherche astar sur le net, c'est l'lgo le plus utilisé dans les jeux car il est tres performant. J'ai réalisé une bibliothèque pour darkBASIC qui fait ca (voir ma signature, ou la zone des projets, c'est IA::Astar) et tu peux facilement mettre moins d'une milliseconde pour faire cette recherche. Si MMF2 permet d'utiliser directement une dll tu devrrait pouvoir l'utiliser, sinon cherche un article de Patrick Lester sur A*, il est connu , assez traduit et tres fiable.
A noter que A* ne demande pas toujours une map quadrillée.
|
|
Falco |
Posté le 19 Jan 2009 à 14:46 |

Messages : 135
|
Je travaille sous MMF2, je pensais pouvoir faire un truc potable avec des coordonnées X et Y, mais apparemment, c'est bien plus complexe.
Sinon, je viens de trouver la technique qu'ont utilisés Lucas Arts pour SCUMM :
Citation :Dans SCUMM, les parties accessibles d'une carte sont décrites par un graphe de formes géométriques adjacentes.
Des boîtes trapézoïdales définissent les endroits où les personnages peuvent marcher. Ces trapèzes doivent toujours être adjacents à au moins un autre trapèze. En utilisant suffisamment de trapèzes, il sera toujours possible de décrire toute la surface parcourable de la carte. Ensuite, une matrice NxN est définie où N est le nombre de trapèzes, et on la remplit en indiquant dans chaque case de la matrice quel est le prochain numéro de trapèze sur le chemin d'un trapèze à un autre. En ce qui concerne le chemin à l'intérieur d'un trapèze, il est évidemment direct. Le nombre de trapèzes étant souvent assez faible, ce mécanisme donne un moyen de calculer le chemin quasiment en temps constant.
|
|
Mod |
Posté le 19 Jan 2009 à 14:35 |

Messages : 4954
|
Je dirais que A* est plus simple car utilisant les données de la map déjà établie (si map quadrillée, bien sûr), là où l'autre méthode demande de générer un graphe et de l'explorer (là ce serait bon pour un algo Djikstra).
Dans un cas comme dans l'autre ça peut assez rapidement être un gouffre à ressource. Ca pourrait être utile de savoir sur quelle plateforme tu comptes faire cela.
|
|
Falco |
Posté le 19 Jan 2009 à 14:19 |

Messages : 135
|
Hum, d'accord, et la plus simple, c'est laquelle ? :p
Du moins, la plus facile à mettre en place.
Merci.
|
|
Gulix |
Posté le 19 Jan 2009 à 14:16 |

Messages : 184
|
Tu as plusieurs solutions.
L'algorithme A* tout d'abord. Il te permet de définir des chemins sur des environnements de type quadrillé.
Il y a une autre solution, qui consiste à définir des points de passage sur ton terrain, avec un chemin en ligne droite non interrompue entre tous tes points. Tu obtiendras un graphe, et tu pourras calculer le chemin le plus court en inspectant les différents points.
|
|
Falco |
Posté le 19 Jan 2009 à 14:04 |

Messages : 135
|
Bien le bonjour,
Voila, je suis en train de concevoir un système de jeu Point and Clic pour le fun, et je suis bloqué sur un point assez fâcheux ; le Pathfiding.
Pour le moment, j'ai fait :
Lorsque je clic sur un endroit précis avec ma souris, je récupère les coordonnées du points cliqué, puis je soustrait/additionne les variables de coordonnées du héros afin qu'il se déplace précisément sur le point.
De ce coté la, pas de problème, ça fonctionne parfaitement.
Ensuite, j'ai placé une image sur ma map. Cette image représente la zone praticable, autrement dit, le héros ne peut marcher qu'a cet endroit. Si je clique en dehors de cette zone, le personnage s'avancera au bord de cet image, mais ne pourra en aucuns cas la traverser.
Ça fonctionne également.
Voila le plus dur arrive, comment faire pour que si je clique sur un point, et puis qu'entre le héros et ce point, il y ai un obstacle, que le héros décide par lui même de contourner ce point ?
J'ai jamais été vraiment fort en logique ^^"
Si vous pouvez, essayez de ne pas me donner un truc trop compliqué, je débute en programmation :p
Merci par avance :)
|