JeuWeb - Crée ton jeu par navigateur
Système de map complet - 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 : Système de map complet (/showthread.php?tid=7716)

Pages : 1 2 3 4


Système de map complet - fortz - 06-11-2016

Bonjour,
Je crée actuellement un jeu par navigateur et je suis en train de m'intéresser à la map actuellement. Je me heurte cependant à différentes questions concernant la méthode à utiliser afin d'obtenir une map jolie, rapide et pratique à utiliser (un doux rêve j'imagine :p).

Alors tout d'abord la map de mon jeu sera composé de continents séparés par de l'eau. Un continent a une forme relativement aléatoire (ni carré, ni rectangle, ni rond, ...) et sera composé d'environ 750 "cases" (qui seront répartis entre villes de jouer, oasis, village PNJ, cases vides, fleuves, etc...). Disons pour commencer qu'il y a 4 continents ce qui fait tout de même une map conséquente en terme d'espace.
C'est à partir de la que je me pose des tas de questions :
- Comment représenter le continent sur la carte ? au début ce pourra être des cases d'un tableau html qui je colorie d'une certaine couleur, cependant je voudrais obtenir quelque chose de beaucoup plus graphique : pourquoi créér une image pour chaque continent et ajouter par dessus cette image une grille virtuelle (pour avoir un système de cases et donc des positions x|y cohérentes) et dans cette grille ajouter les images pour chaque élément de la map (une ville, un oasis, etc...). On aurait donc une grande image avec les 4 continents avec chacun des éléments qui viennent par dessus. Ce système pourrait-il fonctionner ? (on parlera algo plus tard, car je pense que j'aurais besoin d'aide :p)
- En considérant que je prenne cette méthode-ci, je ne pense pas que ce soit très optimisé de charger, à chaque ouverture de la map, les images des 4 continents et de leurs éléments. Du coup comment faire en sorte de ne charger que les cases aux alentours la vue du joueur se situe (exemple : ma vue est en x:20|y:12, alors je vais charger le bout de continent+les éléments des positions x+2 et y+2). Et si le joueur se déplace sur la map alors on charge les nouveaux éléments et du coup on ne charge à chaque qu'une petite zone afin de gagner en rapidité non ?
- En parlant de déplacement sur la carte, comment faire en sorte que le joueur puisse naviguer sur la map avec un drag et que la vue se change en temps réel (c'est-à-dire pendant que l'utilisateur bouge sa souris, pas seulement lorsqu'il relâche le clique) ?
- Un problème découlant du précédent : lorsque le joueur arrive par exemple dans le coin en bas à droite de la map, est-il préférable de charger tous les autres coins pour donner une impression de map "infinie" ou alors est-il plus ergonomique qu'il butte contre le coin de la map et qu'il doive remonter toute la map pour voir le haut ?

Voilà les principales questions qui me viennent en tête quand je pense à la création d'une map, j'espère avoir été assez clair dans mes questions/explications, n'hésitez pas à demander si vous voulez des précisions. Pour le principe général, je vois grossièrement quoi faire mais seulement dans ma tête :p J'imagine que ca va être un assemblage de Js, PHP et Ajax pour obtenir un résultat dynamique.

Merci pour votre aide. Cordialement.


RE: Système de map complet - Xenos - 06-11-2016

Salut,
j'ai centralisé la thématique de la carte autant que possible, je t'invite donc à y faire un tour (en commençant éventuellement par le bas de la page de résultat, cad l'article le plus ancien donc le 1er de l'ordre chronologique): https://toile.reinom.com/la-carte-de-jeu/

Citation : créér une image pour chaque continent et ajouter par dessus cette image une grille virtuelle
C'est ce que j'utiliserai pour la prochaine mouture d'ECLERD. Une toile de fond raster (SVG serait trop lourd) et, par-dessus, les cases et éléments interactifs. Le tout en SVG. Idem d'ailleurs sur VariiSpace.

Citation :Du coup comment faire en sorte de ne charger que les cases aux alentours la vue du joueur se situe
Heu, juste en sélectionnant les cases correspondantes dans la BDD, et on n'affichant que celles-là?

Citation :Et si le joueur se déplace sur la map alors on charge les nouveaux éléments et du coup on ne charge à chaque qu'une petite zone afin de gagner en rapidité non ?
Early optimisation. Inutile de te lancer dans ce genre de considération tant que tu n'as pas de vrais problèmes de perf (et si le jeu n'existe pas en ligne et n'est pas joué, tu ne peux pas avoir de problème de perf). D'autant que tu verras apparaître des problèmes bien trop chiants du style "un truc a changé dans les cases que je n'ai pas renvoyées au joueur [car d'autres trucs se passent sur le serveur pendant que le joueur se déplace]".

Citation :comment faire en sorte que le joueur puisse naviguer sur la map avec un drag et que la vue se change en temps réel
Autant faire un jeu AAA RTS classique avec un bon SDK, ce sera bien moins chiant que de gérer des problématiques de ce style (oui, gnagna, le framework bidule te permet de le faire direct, blabla, le SDK est juste la version encore plus poussée de ce framework pour n'avoir vraiment que du contenu [de qualité] à créer).
Pour ma part, ECLERD fonctionne autrement, sur un paradigme plus adapté au web (et donc plus simple selon moi): en gros, j'affiche une carte planétaire composée de "grosses cases" groupées en pays; quand on clique un pays, j'affiche ce pays, qui est alors re-découpé en cases; quand on clique une de ces cases, on voit une région du pays, elle-même composée à nouveau de cases (isométriques cette fois); quand on clique une case isométrique, j'affiche les informations de cette case et les contrôles qui vont avec. Chaque "niveau de zoom" a donc ses propres informations et contrôles, ce qui permettra de gérer facilement la navigation.

Citation :est-il préférable de charger tous les autres coins pour donner une impression de map "infinie"
Ca dépend du gameplay que tu veux, il n'y a pas de "bonne" réponse.


RE: Système de map complet - fortz - 06-11-2016

Merci pour ce lien, je vais y jeter un oeil.
Je suis d'accord pour dire que pour le moment ca ne pose aucun problème de performance étant donné que la carte sera relativement petite mais ne vaut-il pas mieux développer directement quelque chose d'optimisé ? (après si c'est vraiment beaucoup plus complexe, je comprends le fait de la faire d'abord en mode non-optimisé)

Ce que j'entendais par "comment faire en sorte de ne charger que les cases aux alentours la vue du joueur se situe", c'est lié à "on ne charge à chaque qu'une petite zone afin de gagner en rapidité". En fait, je me demandais si ça ne serait pas pratique de créer une grosse image avec toute la map puis en fait découper cette image en mini-image correspondant à chaque case de la grille virtuelle, du coup, j'ai simplement à charger les images des cases que je veux charger, à y ajouter sur chaque case une ville, un oasis ou autre (que je recupèrerai en BD)  ? du coup chaque image serait nommée par exemple 25x_22y.png correspondrait à la vue de la case en x:25|y:22. Pensez-vous que ca pourrait être une bonne solution ?

Concernant le déplacement sur une map avec un drag, le lien que tu m'as envoyé n'est pas pour créer une carte 2D (style grepolis) si ?

Pour le dernier point je pense que ce serait plus fluide de créer une map "infinie", du coup du moment que tu es en bas et que tu descends tu te retrouves en haut, je trouve plus sympa.

Merci pour votre aide.

Edit : J'ai crée un continent simplifié comme je le verrai dans mon jeu (soyez indulgent je sis débutant sur Gimp) je l'ai mis en PJ.


RE: Système de map complet - Xenos - 07-11-2016

Citation :ne vaut-il pas mieux développer directement quelque chose d'optimisé
Non quand ça se fait au détriment de la qualité de l'archi ou de la lisibilité du code. C'est le cas dans 95% des cas (voire plus), donc non. "Make it work, make it right, make it fast": arrange toi pour que le jeu de base tourne d'abord et avant tout, puis mets-le d'équerre ensuite, et seulement à la fin, en le conservant opérationnel et d'équerre, tu l'optimiseras (si nécessaire).

Le temps machine (l'optimisation de l'éxécution), osef complètement. Le temps du développeur (le temps qu'il te faut pour penser et coder le jeu), c'est ce qui compte.

Le lien Neoaxis, c'est pour te dire que derrière des "Grepolis" et autre, y'a 15 personnes à 40h/semaine depuis 3 ans (en gros). Si tu veux le même résultat plus rapidement, prends un outil plus adapté: le SDK Neoaxis se charge de toute l'archi derrière le jeu (réseau, server/client, temps réel, interface client sur PC, 3D iso ou non, etc). Ce sera 100x plus adapté que de te lancer dans un jeu AAA sur le web (qui ne sortira jamais s'il est pensé comme un RTS hors web, aka un RTS que t'achèterais en version boite à Micromania). T'en auras sûrement d'autres qui me contrediront, mais je pars juste du principe qu'il m'a fallut 1 soirée pour faire un petit qqc qui tourne sur NeoAxis, alors que d'autres veulent faire des Age Of Empire-like sur le web depuis des années.

C'est toi qui voit pour le gameplay. Pour ma part, le bord de carte est intéressant à intégré car il amène des zones permettant de se défendre plus facilement (dans un coin, on n'a que 1/4 de la frontière qu'on aurait au centre). Généralement, le centre est blindé de richesses et les bords sont des zones de repli.


RE: Système de map complet - fortz - 07-11-2016

Merci pour ta réponse,
Je vais le faire comme je le vois alors (sans optimisé) pour essayer d'obtenir une map très convenable même s'il peut mettre une petite seconde à s'afficher. Je privilégie le fait-main complet sur cette map, j'ai du temps et j'en vraiment envie de faire quelque chose fait complètement et uniquement par moi.
Je te recontacte si je rencontre des problèmes dans le développement (que j'ai déjà commence Wink )


RE: Système de map complet - fortz - 07-11-2016

Voilà j'ai un peu avancé sur la map, j'obtiens quelque chose de basique avec les fonctionnalités classiques (décalage haut, bas, gauche, droite, recentrer et le zoom x0.5, x1 et x2). Le lien est le suivant : http://j-o-h-a--alexandrefrazerfrazer129319.codeanyapp.com/map/. Pourrais-tu jeter un oeil au code et me dire ce que tu en penses ? Suis-je parti sur une bonne base (je n'ai pas utilise de canvas) ?
PS : la map que je souhaiterais vraiment obtenir (enfin pour te donner une idée) est celle de Travian Kingdoms, je peux fournir un screenshot si besoin et j'ai regardé un peu leur code, et c'est fait avec canvas, je me demande vraiment comment arriver à un tel résultat ?


RE: Système de map complet - Xenos - 08-11-2016

Citation :Travian Kingdoms
C'est le genre de jeu derrière lequel il y a une équipe de 30 personnes depuis 3 ans, avec 5 ans d'expérience chacun. Si tu veux en faire un *-like, je te conseille de lâcher le Web et de te tourner vers les SDK façon Unity ou Neoaxis (je préfère ce dernier car c'est celui que j'ai pu essayé, et je l'avais essayé car à l'époque, Unity proposait en payant certains features gratuites de NeoAxis).

Là, tu pars pour t'empêtrer dans un projet de jeu qui ne verra jamais le jour. Si cela ne te dérange pas, je laisse les temps-réelistes t'aider (car ils t'enverront vers les FW qui savent faire ce genre de chose), mais je pense que le jeu ne sera alors jamais opérationnel et jouable (au sens adapté au Web).

Sur ECLERD, j'ai eu les mêmes tatônnements (je devrais les formaliser en article d'ailleurs). J'étais parti sur ce genre de carte isométrique "scrollable & zoomable", et j'ai vite compris que quoi que j'en fasse, ce ne sera pas pratique: trop de bazar à gérer pour le faire, trop "déjà-vu", mal adapté au Web. Et j'ai donc changé de structure de carte pour une carte arborescente avec des niveaux de zoom indépendants. Le zoom planète est donc une première carte, affichée intégralement (niveau "monde") ou partiellement (niveau "pays"). Le zoom isométrique est une seconde carte indépendante, toujours affichée partiellement (j'affiche les cases isométriques appartenant à la case "pays" que j'observe).

Ca a l'avantage d'être simple à implémenter, d'être plus original (on verra si c'est mieux) et bien plus adapté au web. En plus, à l'usage, je trouve cela plus pratique pour jouer: on n'a pas besoin de visualiser (mal) les 1000 cases de son territoire: on visualise (bien) les 10 cases pays qu'on contrôle, et sur celle où les choses vont mal, on zoom et on voit les 10 cases isométriques qui la compose, pour lancer les usines manquantes (par exemple).

C'est la même approche sur VariiSpace d'ailleurs: je n'affiche pas l'univers entiers en 3D et tout (bien trop délirant), mais j'affiche 1 objet céleste (un trou noir par exemple) et ses satellites (les étoiles). Quand on clique un satellite (une étoile), il devient l'objet céleste observé (l'étoile est au centre de l'écran) et on voit ses satellites (les planètes). Etc. C'est véloce, simple à coder, simple à utiliser, et adapté au Web.


RE: Système de map complet - fortz - 08-11-2016

Tu as regardé le lien que je t'ai envoyé ? Alors je ne prévois pas de faire un copié/collé de jeux existants, ca ne m'intéresse pas. Je t'ai donné l'exemple de ce jeu, car il y a quelques éléments que je trouve intéressant. Quant aux SDK que tu) me proposes j'ai du mal à comprendre comment je vais pouvoir les utiliser pour les intégrer dans mon projet (et en plus j'ai l'impression que ce sont des moteurs 3D et non 2D non ?
Les FW ?
J'ai prévu également de créer environ 3 niveaux de zoom : celui qui permet la vision de sa ville +- 3 cases (vue locale), l'autre sa ville +- 10 cases (vue environs) et la dernière sa ville +- 20 cases (vue large).
Merci


RE: Système de map complet - Xenos - 09-11-2016

Zut, j'ai oublié en effet de dire que ton lien est inaccessible d'ici. Tu peux utiliser Unity pour de la 2D. Je ne sais pas si c'est parfaitement adapté, mais à al lecture de la description, cela me semble intéressant comme piste si tu veux te concentrer sur le coeur de jeu (gameplay, contenu graphique, etc).


RE: Système de map complet - fortz - 09-11-2016

Tu n'as pas répondu au reste de mon message (à partir de "Les FW ?") Sad
Pour unity en fait j'ai du mal à voir comment ça pourrait m'aider à créer le système que je veux créer, j'ai l'impression que c'est juste pour m'aider à créer la map graphiquement non ?