Module de carte héxagonale 2D - 3D Iso avec relief - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Module de carte héxagonale 2D - 3D Iso avec relief (/showthread.php?tid=4044) |
RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 08-06-2009 Non mais le truc c'est que je fais pas ça avec l'idée "pour mon jeu" mais plutot dans l'optique de faire une classe super modulable qui permettent à qui a besoin d'afficher une carte, de se faciliter la vie ! Une espèce d'une premiere pierre vers un framework Et l'hexagonale ne pose pas le problème des distance par rapport au diagonales ! RE: Module de carte héxagonale 2D - 3D Iso avec relief - Argorate - 08-06-2009 Je te souhaite bonne chance alors! Mais il n'y a aucun problème de distance pour les diagonales (sauf si on veux s'embeté la vie encore une fois pour rien) RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 08-06-2009 Mais les calculs sont pas excessivement compliqué avec de l'hexagonal, il suffit d'avoir les bonnes formules, s'tout. :p RE: Module de carte héxagonale 2D - 3D Iso avec relief - Roworll - 09-06-2009 Citation :Juste une question: tu peux me donner les raisons qui te poussent à prendre des cases hexagonales (qui selon moi est non seulement beaucoup plus chiant à coder, mais qui en plus n'apporte rien, c'est même pire, ça enlève des possibilités: 6 cases, 6 directions au lieu de 8 en temps normal...)? La structure hexagonale est pour moi héritée des wargames. Elle présente un avantage considérable au niveau de l'équité dans les déplacements. Dans une structure quadrillée, un déplacement en ligne/colonne et un déplacement en diagonal ne représentent pas la même distance (1 unité dans un cas, 1.41 dans l'autre). Même problème pour les obstacles. Imaginons des unités (ou une barrière) placée le long d'une diagonale. Il va falloir un algorithme précis pour empêcher le passage perpendiculairement à cette diagonale Bref, si l'hexagone est plus difficile à mettre en place, il offre plus de possibilités tactiques réelles. RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 09-06-2009 Voilà, c'est ce que je voulais dire avec les "diagonales". Cependant, le module que je fais sera capable d'interpreter une même carte (liste de x,y) de plusieurs manières (pour l'instant hexa2D, ensuite hexa2Diso, puis ensuite je rajouterai carré ect...) Avancement : Zoom réglé (les textures ne sont plus des background mais des images...) Cependant je suis en train d'empiler des div pour chaque cases... Est-ce vraiment bon ? Vous pouvez donc à présent rajouter un argument "zoom" sur la barre d'adresse (avec zoom=50 la tuile de base) [cache] Code PHP :
Je suis sûr qu'il y a moyen de se passer de la methode _nbrAdjAlt mais je ne sais pas comment le faire efficacement :/ RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 09-06-2009 Et hop premier passage à l'hexagonal : http://kgoyon.free.fr/map/?mode=2Diso 2 modes : 2D ou 2Diso à rentree sur la barre d'adresse A faire : -Regler problème de décalage dû aux cases allant sur la gauche en isometrique - Adapter les textures dans un premier temps - Agrandire les images pour y faire rentrer des hexas et textures en volume NB : Le problème de décalage est visible si vous changez le nombre de case afficher = la taille de la carte avec sur la barre d'adresse tailley=5 par exemple Décalage réglé ! RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 09-06-2009 Ajout de lien sur les cases, afin de visualiser en carte restreinte. (Bon cliquez vous verrez x)) RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 10-06-2009 A votre avis : Les parametres d'affichages (la case sur laquelle la carte est centree, la taille de la carte affichee, le zoom... ect) doivent il rester des parametres d'entree de la methode afficher_carte() ou serait il preferable qu'il soit des variables de la class carte ? (en sachant qu'une carte n'est pas toujours censée être affichée) Par ce que je comment à faire passer quasiment tous ces paramètres dans des méthode prive appelées par la methode afficher_carte car ils me servent pour les calculs... Ex : La methode afficher_carte va appelé pleins de fois la methode creer_case, or cette methode a besoin de quasiment tout les parametre d'affichage pour correctement fonctionner... Merci d'avance. Edit : En fait ma problematique est encore plus vaste puisque je suis en train de travailler sur les cases adjacentes à celle du joueur (afin de les munir d'un lien de deplacement) Le problème étant que, puisque je parcours ma carte de y en y, de x en x, je vais rencontrer mon joueur après avoir etudier quelques unes des cases adjacentes à la sienne... Séparation de la génération du html et les informations d'affichage de chaque case ? >< Une case, pour s'afficher, à besoin de : - ses coordonnees dans la carte complete (x, y) - le decalage par rapport à la carte complete de la carte partielle (x_decalage, y_decalage) (communs à toutes les cases) - ses coordonnees dans la carte partielle (affichée) (xc, yc) (dépendent de x, y, x_decalage, y_decalage) - zoom (taille d'un coté de l'hexagone > "n") (communs à toutes les cases) - largeur ( l ), hauteur ( h ) (dépendent de n) - sa position (posX, posY) (dépendent de x (si crenelage en x), y (si crenelage en y), xc, yc, n) - du mode d'affichage (mode = 2D, 2Diso) (communs à toutes les cases) - la taille de la carte partielle (taillex (si crenelage en x), tailley (si crenelage en y)) (communs à toutes les cases) Donc si je veux faire une étape intermediaire, c'est à dire que la methode afficher va d'abord stocké toutes ces infos dans un tableau, puis ce tableau sera ensuite interpréter en HTML (ce qui laisse la possibilité de l'interpreter dans d'autre langage ). Entre ces 2 étapes je pourrai alors modifier des cases déjà évaluées. Qu'en pensez vous ? ComG, en mode monologue x) Donc au final, les seules infos particulières à UNE case, et qui ne peuvent pas se déduire des infos GLOBALES sont : - xc (on peut en deduire x par x_decalage) - yc (on peut en déduire y par y_decalage) Ensuite les informations finalement affichées : - hexa (structure) (n'a aucune raison d'être modifié par une case évalué après) - texture (n'a aucune raison d'être modifié par une case evalué après) - objet/batiment/decor (n'a aucune raison d'être modifié par une case evalué après) - personnage (n'a aucune raison d'être modifié par une case evalué après) - informations sur la case (n'a aucune raison d'être modifié par une case evalué après) - liens (deplacement pour une case adjacente, interaction pour une case où se trouve un autre joueur, juste acces aux infos pour une case dans le champs de vision, aucune infos pour les cases hors champ de vision...) <<< On peut donc jouer juste sur une valeur qui classe la case selon cela soit => Code : xc | yc | type - adjacente - adjacente + autre joueur - dans le champs de vision - dans le champs de vision + autre joueur - hors champ de vision On pourrait alors diviser ce "type" en 2 champs Code : xc | yc | distance | joueur Bien entendu, tout cela par rapport à une seule case qui est la case du joueur actif ! Il faudra cependant gerer le cas ou la carte prend en compte ce joueur actif (champs de vision), ou bien s'il ne s'agit que d'une navigation sur la carte... RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 10-06-2009 Voilà, j'ai presque finit de restructurer ma classe de manière à séparer au maximum l'affichage de la carte de la récupération d'infos de la carte, ce qui permettra, sans altérer la carte, d'en modifier les cases affichées (par exemple pour une zone de perception) Quelqu'un connait les formules de distance sur une hexmap ? Je suis un peu perdu dans ma recherche. Si je trouve je la posterai ici ! ComG, va devenir fort en hexmap x) NB : Je parle d'une distance plutôt en "nombre de case entre (xa,ya) et (xb,yb)". RE: Module de carte héxagonale 2D - 3D Iso avec relief - comg - 10-06-2009 Je cherche actuellement les conditions sur x et y pour que ces cases soit à une distance d de la case xa, xb Avec p = x%2 (parité de x : p=1 si x impair, p=0 si x pair) if( x <= xa + d AND x >= xa - d AND y <= ya + d AND y >= ya - d ) |