[Projet C#] Parlons Pathfinding

5 réflexions au sujet de “[Projet C#] Parlons Pathfinding”

  1. Bonjour Carpi,

    Merci pour ton devlog. J’aurais besoin de précisions s’il te plait.

    En dehors, de l’optimisation du poids occupé par la librairie, quel avantage y avait-il de la modifier pour permettre de gérer les map hexagonales ?

    Dans mes souvenirs, l’algo A* fonctionne avec une table de pseudo-booléens, on est donc au niveau de l’update et pas au niveau du Draw.

    Quelles difficultés as-tu rencontré dans le calcul (et pas le positionnement graphique) de ta trajectoire ?

    Merci pour tes lumières.

    Bon code.

  2. Bonjour S3v@l,

    Alors tout d’abord oui, on est bien sûr uniquement au niveau de l’update, surtout pas du draw. Quand je dis que dans ma projection isométrique des tuiles hexagonales utilise un décalage par rapport à une carte 2D classique c’est simplement pour dire que comme je ne vais pas afficher mes tuiles dans l’ordre habituel je dois en tenir compte dans le comportement (mouvement pattern) que je vais demander dans l’update à ma classe de pathfinding (si je suis en 2D ou en 2D iso je ne passe simplement pas le même paramètre quand j’appelle ma fonction statique pour créer mon parcours)

    Pourquoi la librairie de Roy-T doit être modifiée pour les hexagones ? Si on prend une carte 2D avec tuiles carrées, on un comportement qui est toujours identique quelque soit la tuile sur laquelle on se trouve (la position relative des cases autour est toujours la même).
    Par exemple le comportement utilisé par la lib pour un déplacement autorisé dans toutes les directions :
    public static readonly Offset[] Full = {
    new Offset(-1, -1), new Offset(0, -1), new Offset(1, -1),
    new Offset(-1, 0), new Offset(1, 0),
    new Offset(-1, 1), new Offset(0, 1), new Offset(1, 1)
    };
    Quand on travaille avec des hexagones, la position relative des cases autour dépend de la tuile sur laquelle on se trouve. Si on prend une carte 2D classique avec tuiles hexagonales horizontales (c’est le même principe avec les hexagones verticaux il faut juste adapter les valeurs), suivant si on est sur une colonne pair ou impair on va avoir des positions relatives différentes. Exemple :
    public static Vector2[] Hex2DToutesDirections =
    {
    new Vector2(0, -1),
    new Vector2(-1, -1), new Vector2(1, -1),
    new Vector2(-1, 0), new Vector2(1, 0),
    new Vector2(0, 1)
    };
    public static Vector2[] Hex2DToutesDirections2 =
    {
    new Vector2(0, -1),
    new Vector2(-1, 0), new Vector2(1, 0),
    new Vector2(-1, 1), new Vector2(1, 1),
    new Vector2(0, 1)
    };
    Il faut donc modifier l’algorithme pour qu’il choisisse quel mouvement pattern utiliser suivant l’étape du parcours qu’il est en train de traiter.

    La librairie de Roy-T ne peut donc pas être utilisée brute pour des hexagones. Le plus rapide est bien sûr d’adapter directement la lib. Personnellement une fois compris son fonctionnement, j’ai préféré tout remettre à plat pour le refaire à ma façon afin de pouvoir m’y retrouver plus facilement par la suite si j’ai besoin d’y revenir dessus (et puis pour continuer l’apprentissage du C# j’y ai aussi été gagnant, au départ je n’étais pas du tout sûr que les modifications que je me permettais allaient bien fonctionner comme je l’imaginais).

    PS : Je garde dans un coin de la tête ta suggestion de la semaine dernière de portage des cartes 2D iso en LUA mais pour l’instant, comme j’ai peu de temps disponible, je continue d’exploiter les idées que j’ai en stock pour mes hexagones.

  3. Bonjour Carpi,

    Merci beaucoup pour tes explications et le lien très intéressant.
    Je crois que c’est en m’y mettant que je comprendrai mieux les problématiques que tu as rencontrées.

    Cela n’a pas l’air évident en effet !

    Pas de souci pour la transposition du code de David en Lua, j’essayerai de déposer en commentaire ma version qui fonctionne ce week-end.

    Merci pour tout.

    Bon code !

  4. Oui j’ai rencontrer le même probleme pour faire un Bubble game avec des lignes décalées, une représentation en tableau ne marche pas, car on a 6 cotés au lieu de 4 ?

Laisser un commentaire

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.