Choix de système de la cartographie

Modérateurs: Ligevum, Crepuscule, Wargaming, Okracoke, Simerion, Heroes, Bestiaire, Exsulare, terato, pentacle, Nainwak

Choix de système de la cartographie

Messagepar SirGalahaad » 03 Mai 2009, 07:45

bonjour à tous,

alors voilà, je me pose la question au sujet de la cartographie pour avoir une idée de quelle est la méthode la mieux adaptée

dans la nouvelle version de golden age (la V3 donc) il y aura plusieurs cartes (environ 80, dont 66 îles faisant 50x50 cases)

l'affichage de la carte visible par le personnage (celle où il se voit et se déplace) fait 9x9 cases (il voit à une distance de 4 cases), chaque case faisant 60pixels

j'ai trois pistes pour l'affichage :
1) la piste que nous avions choisi au début : on dessine des tuiles (une pour chaque type de terrain, plus un certain nombre de variantes avec des formes variées pour le chevauchement des jointures entre différents types de terrains, par exemple une forêt qui jouxte une prairie d'une façon plus propre qu'en dents de scie) et on affiche les tuiles une par une, puis on affiche des tuiles par dessus quand c'est nécessaire pour gérer les zones de jointures
ça marche bien, ça se charge assez vite, mais (car il y a un gros mais) la création de chacune de ces cartes (2500cases, donc 2500 lignes à rentrer en base de données pour chaque carte) est extrèmement longue et fastidieuse, en fait ça représenterait un boulot tellement long que ça m'a découragé

raison pour laquelle j'ai cherché d'autres méthodes

2) on génère des cartes sous la forme de grands dessins, et on découpe à la volée une image plus petite que l'on affiche dans le <div> adéquat pour que le joueur voit sa mini-carte, j'ai trouvé la fonction imagecopy() en php qui semble être exactement ce qu'il me fallait
le problème c'est que j'ai peur que ça sollicite trop de ressources du serveur (et en plus je sais pas si la librairie GD est activée)

3) dernière idée :
<html>
<head><title>redimensionner une image par css</title></head>
<body>
<div style="width:100px;height:30px;overflow:hidden;">
<div style="position:relative;top:-30px;left:-300px;">
<img src="http://test.goldenage.nainwak.org/images/style/logo4.png"/>
</div>
</div>

</body>
</html>

ici j'affiche exactement la portion de carte que je veux, sans générer de calcul coté serveur
par contre je pense qu'avec cette méthode, il va quand même télécharger la totalité de l'image même s'il n'en affiche qu'une toute petite partie, et vu la taille des cartes c'est pas un bon plan...

bon, finalement mon post est assez long (mais du coup j'espère qu'il servira à d'autres créateurs de jeu débutants comme moi), et je vous remercie si vous l'avez lu jusqu'ici :P
la question est : qu'en pensez-vous, qu'est-ce qui vous semble la meilleure solution?
ou peut être y a t-il une autre façon de faire à laquelle on a pas pensé et que vous pourriez m'expliquer ?
SirGalahaad
 
Messages: 54
Inscription: 13 Nov 2006, 13:44
Localisation: Gréasque

Messagepar Kaël » 03 Mai 2009, 09:20

Heum du coté de Ligevum on avait testé la méthode n°3, seulement, c'est pas type top , même si le cache est activé c'est lent...... et en plus si tu veux changer la carte bah les joueurs ne verront rien s'ils ne font pas F5.

Donc résultat pour la version php on était resté sur le système de tuile (que j'ai gardé et amélioré pour la version C++ à venir). En effet, même si c'est lent, c'est plus facilement modifiable (avec un éditeur de map codé à l'arrache et en esclavagisant deux trois joueurs motivés ça se fait) . De plus, ça te permet d'ajouter de l'information aux cases, comme un coût en mouvement, ce qui augmente la stratégie, ou alors la proportion de ressource (gibier, minerais, végétaux,...) possible de trouvé sur la case. Tu peux aussi changer l'aspect de ta map (noël par exemple avec de la neige), en ayant juste à changer les tuiles de bases, après tout le reste suit.


Fin perso je garde la première méthode :D, c'est plus simple au niveau d'un système php, parce que t'es limité niveau calculs et transfert d'infos.
Prog et admin de Ligevum
Avatar de l’utilisateur
Kaël
 
Messages: 53
Inscription: 29 Sep 2005, 18:02

Messagepar Daimonos Tereutes » 03 Mai 2009, 20:44

Quelques pistes de réponse, après chacun fait bien comme il veut ;)

La première chose à faire c'est de décomposer la map en plusieurs couches.
Exemple de décomposition :
- les éléments fixes et planes du terrain (herbe, chemin...)
- les éléments en relief (personnages, arbres, ...)
- une couche pour le brouillard de guerre.

:arrow: La couche fixe :
C'est elle qui se prête le mieux à une sauvegarde dans un format image.
Et surtout qui peut être calculée hors jeu.

Stocker chaque case dans la bdd n'as d'intérêt que si tu as une interaction entre la case et les joueurs (ex bonus de déplacement/attaque/défense... en fonction du terrain)
Dans ce cas, un affichage de la map sous forme de tuiles est assez simple.
Enfin dans la mesure où le nombre de tuiles est limité, dès qu'on commence à gérer des tuiles différentes en fonction des tuiles voisines, le nombre explose.

Un exemple de jeu qui fonctionne assez bien suivant ce principe est Nainwak.
Pour créer les maps on utilise un petit éditeur pratique, bien que limité.
http://ekinox.nainwak.com/nwmekV2/nwmek.html

A noter que cette solution est galère pour une map un peu complexe et de plus on ne l'utilise plus sur Nainwak :p

Une autre solution beaucoup plus pratique c'est de créer une grande image par monde et de découper celle-ci en gros morceaux. C'est facile et ça évite de charger toute l'image.

dans le cas d'une carte de 50x50 cases avec visibilité à 4 cases, la première découpe donnerait :
1,1 à (25+4),(25+4)
1,(25-4) à (25+4),50
(25-4),1 à 50,(25+4)
(25-4),(25-4) à 50,50

L'idée c'est d'avoir une zone de recouvrement de manière à ne pas devoir charger deux zones (ici le carré central de 8x8 cases existe sur toutes les zones).
On peux bien sur faire des zones plus petites mais si c'est pour avoir autant de zones qu'avec des tuiles... autant faire de vrai tuiles ;).
Attention si tous les personnages n'ont pas la même distance de vue, il faut en tenir compte et prendre la plus grande possible.

:arrow: la couche avec les éléments en relief :
Là pas de miracle, faut la recalculer sans arrêt.
Encore une fois si le nombre d'éléments affichées est très limité il est possible d'utiliser des tuiles (cas de nainwak où l'on ne tiens pas compte du relief et où la quantité d'info est très limitée)

Dans tous les autres cas, il faut faire le rendu en temps réel avec php.
Il faut choisir la bonne bibliothèque (certaines gèrent mal la transparence par exemple et d'autres sont très lentes). Là pas de miracle, il faut les essayer et voir laquelle conviens le mieux pour ce que vous en faites.
quelques exemples de bibliothèques :
http://fr.php.net/imagick
http://fr.php.net/gd
http://pecl.php.net/package/FreeImage
http://pecl.php.net/package/imlib2
http://pecl.php.net/package/cairo

bref du travail en perspective ;)
Admin technique de nainwak.org
Daimonos Tereutes
Responsable Technique de l'Association
 
Messages: 926
Inscription: 30 Mar 2004, 18:39

Messagepar SirGalahaad » 04 Mai 2009, 14:25

merci pour vos réponses !
je vais tâcher de réfléchir à ça, Daimonos, le script utilisé sur le lien :

http://ekinox.nainwak.com/nwmekV2/nwmek.html

si vous ne l'utilisez plus ça vous gênerait de passer le code source? on doit pouvoir l'utiliser avec nos propres tuiles sans beaucoup de modifications non ?
SirGalahaad
 
Messages: 54
Inscription: 13 Nov 2006, 13:44
Localisation: Gréasque

Messagepar Daimonos Tereutes » 05 Mai 2009, 11:23

Je t'ai donné en MP le lien pour télécharger la dernière version.
Tu peux regarder pour t'en inspirer mais je doute que ça te soit très utile, le format de sauvegarde des map est spécifique à Nainwak et pas très souple.
De plus c'est écris purement en html/javascript (même pas besoin de serveur web) donc pas très fonctionnel.
Il existe des éditeurs autrement plus aboutis en libre téléchargement sur le net. Il y a un jeu de l'assoc qui en a utilisé un, mais je me souviens plus lequel. Peut être que Kaël pourra t'en dire plus si c'est le sien.

Edit : C'est Aquanum pour le jeu Simerion qui utilise un éditeur de carte en Java.
Admin technique de nainwak.org
Daimonos Tereutes
Responsable Technique de l'Association
 
Messages: 926
Inscription: 30 Mar 2004, 18:39

Messagepar SirGalahaad » 05 Mai 2009, 12:43

ok merci je vais voir si j'en trouve un, et je vais jeter un oeil à celui que vous utilisiez :)
SirGalahaad
 
Messages: 54
Inscription: 13 Nov 2006, 13:44
Localisation: Gréasque

Messagepar finalbob » 06 Mai 2009, 21:49

Si aka passe par là, il peut balancer un nom ? :D
phpBB bouh !
vive cb ! http://connectix-boards.org/
finalbob
 
Messages: 70
Inscription: 20 Avr 2007, 11:31

Messagepar Chatissimus » 06 Mai 2009, 23:55

Dans la disposition en tuile, Il y a un chose intéressante avec la disparition progressive de IE6 c'est qu'on va pouvoir faire des multicouchage de des tuile en png24
ca évitera de devoir générer en statique toutes des combinaison possible de jointure

pour une case on pourra par exemple avoir
--- image de base
--- jointure avec la case de droite
--- jointure avec la case de gauche
--- batiment.

tout en ayant des jointure jolies (pas découpé au couteau comme avec un gif par exemple)

avec juste 13 élément par type de terrain on pourra faire toutes les combinaison d'élément à la volée.
Avatar de l’utilisateur
Chatissimus
 
Messages: 51
Inscription: 19 Jan 2007, 22:50

Messagepar Haiken » 23 Mai 2009, 13:31

L'éditeur utilisé par simerion est Tiled : http://www.mapeditor.org/
Avatar de l’utilisateur
Haiken
Président de l'Association
 
Messages: 666
Inscription: 01 Avr 2004, 09:00


Retourner vers Questions Pratiques/Techniques

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron