04-05-2011, 10:36 AM
Ca ne répond peut-être pas à ton besoin, mais ça en aidera peut-être d'autre...
Vu que je suis passé par là pour Eden-5 et que c'est ce qui m'a prit un paquet de temps à résoudre, voilà ce que j'ai mis en place :
Côté base de donnée :
- une table "template" qui me permet de gérer l'image de la carte, et les paramètres fixes (dimension de l'image, dimension de la grille, case navigable ou non, etc.)
- une table "map" avec donc un index vers le template et des informations spécifique (nom et description de la zone par exemple)
- ensuite j'ai une table par "famille" d'objet sur la carte : personnage joueur, sortie, objet avec interaction, etc..
- enfin, à des fin d'optimisation, j'ai ajouter une Vue qui liste rapidement les objets (toute famille) présent sur une map (qui me permet donc rapidement de savoir s'il y a quelque chose sur une case ou non) cette vue comprend principalement : id de la map, famille d'objet, id de l'objet, position x sur la map, position y sur la map, et un numéro d'ordre pour gérer la priorité d'affichage lorsque 2 objets sont sur la même case.
Côté rendu, ça me donne 3 couche l'une sur l'autre sur la page :
- l'image de la map (balise IMG)
- la grille (balise table)
- et ensuite tous les objets, positionné au pixel prêt sur la map
Petites explications :
- la grille est toute seule et ne contient pas les objets, tout simplement pour pouvoir l'afficher ou la masquer au besoin
- les objets ne sont pas placés dans une grille car certains vont pouvoir chevaucher deux cases, peut-être glisser d'une case à l'autre plus tard, et que je peux avoir plusieurs objets sur une même case (icone identifiant une sortie + un personnage)
En terme de cache, l'objet issue de la table Map et Template peut être mis en cache sans problème, par contre tout ce qui est issue de la vue... c'est selon la nature de l'objet.
Bref, j'étais passé au début par la solution de stocker toutes les cases en base, mais j'ai finalement abandonné car premièrement beaucoup de case sont vide et donc des données inutile en base, et ensuite j'avait le besoin d'avoir parfois plusieurs éléments sur une même case.
Vu que je suis passé par là pour Eden-5 et que c'est ce qui m'a prit un paquet de temps à résoudre, voilà ce que j'ai mis en place :
Côté base de donnée :
- une table "template" qui me permet de gérer l'image de la carte, et les paramètres fixes (dimension de l'image, dimension de la grille, case navigable ou non, etc.)
- une table "map" avec donc un index vers le template et des informations spécifique (nom et description de la zone par exemple)
- ensuite j'ai une table par "famille" d'objet sur la carte : personnage joueur, sortie, objet avec interaction, etc..
- enfin, à des fin d'optimisation, j'ai ajouter une Vue qui liste rapidement les objets (toute famille) présent sur une map (qui me permet donc rapidement de savoir s'il y a quelque chose sur une case ou non) cette vue comprend principalement : id de la map, famille d'objet, id de l'objet, position x sur la map, position y sur la map, et un numéro d'ordre pour gérer la priorité d'affichage lorsque 2 objets sont sur la même case.
Côté rendu, ça me donne 3 couche l'une sur l'autre sur la page :
- l'image de la map (balise IMG)
- la grille (balise table)
- et ensuite tous les objets, positionné au pixel prêt sur la map
Petites explications :
- la grille est toute seule et ne contient pas les objets, tout simplement pour pouvoir l'afficher ou la masquer au besoin
- les objets ne sont pas placés dans une grille car certains vont pouvoir chevaucher deux cases, peut-être glisser d'une case à l'autre plus tard, et que je peux avoir plusieurs objets sur une même case (icone identifiant une sortie + un personnage)
En terme de cache, l'objet issue de la table Map et Template peut être mis en cache sans problème, par contre tout ce qui est issue de la vue... c'est selon la nature de l'objet.
Bref, j'étais passé au début par la solution de stocker toutes les cases en base, mais j'ai finalement abandonné car premièrement beaucoup de case sont vide et donc des données inutile en base, et ensuite j'avait le besoin d'avoir parfois plusieurs éléments sur une même case.