IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

[C] Editeur de cartes Tilemap generique


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut [C] Editeur de cartes Tilemap generique
    Bonjour,

    J'ai fait un éditeur de tilemap qui "sérialise" une structure map (hauteur, largeur, charset, et pointeur sur une structure tile contenant d'autres propriétées comme la clé, booléen pour la collision et éventuellement d'autres propriété suivant le jeu) dans un fichier texte (avec les fonctions C fwrite / fread).

    Le probleme c'est que je doit re-créer un editeur, ou recompiler l'éditeur quand la définition de la structure map change (modification / creation d'un jeu).

    Ce n'est pas dramatique car ce n'est pas la partie la plus couteuse en terme de temps ou de réflexion (changement de la structure, ajout d'un fwrite / fread), mais quel sont les techniques pour rendre une carte générée "extensible" dans l'éditeur et dans le chargeur (lors de la lecture de la carte par l'éditeur ou par le jeu)
    all your base are belong to us.

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    hem... réponse peut-être un peu bête, mais pourquoi ne pas le développer en C++ et ainsi utiliser les possibilités que l'aspect 'objet' t'offre (héritage, polymorphisme, ...) ?

    Sinon, tu as toujours la possibilité de 'singer' l'approche objet, avec par exemple:
    - le fait de prévoir un pointeur en void* pour toutes les propriétés supplémentaires.
    - que ta partie qui s'occupe du chargement/enregistrement accepte un pointeur vers les fonctions de sérialisation/désérialisation pour les propriétés supplémentaires.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut TheDrev je te conseille d'utiliser les conteneurs C++ parce que des listes chainées en C c'est pas évident ( sans vouloir faire un débat C vs C++ )

    Citation Envoyé par TheDrev Voir le message
    mais quel sont les techniques pour rendre une carte générée "extensible" dans l'éditeur et dans le chargeur (lors de la lecture de la carte par l'éditeur ou par le jeu)
    tu peux utiliser des fichiers de descriptions d'entité xml :
    par exemple si tu veux une "tuile" dessinée sur le fond tu la décriras ainsi en xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <tiles> 
    <tile id="0" position="0,0" size="64,64"></tile>
    <tile id="1" position="0,64" size="64,64"></tile>
    .....
    </tiles>
    Maintenant tu veux rajouter un attribut "walkable" par exemple ( c.a.d. qu'un sprite peut marcher dessus ou non ) et un autre type de terrain ( neige,sable...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <tiles> 
    <tile id="0" position="0,0" size="64,64" terrain="sand"></tile>
    <tile id="1 "position="0,64" size="64,64" terrain="grass"></tile>
    .....
    </tiles>
    Ensuite comment charger ces entités et leur description dans l'éditeur ?
    Eh bien il faut créer un genre de classe "mutante" ou bien mettre ces attributs dans une liste par exemple un std::vector<std::string>> tileAtributes ou une std::list<std::string>>.
    Ainsi pour initialiser cette liste, il faudra faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Attribut position
    tileAtributes.pushback ("0,0");
    //Attribut size
    tileAtributes.pushback ("64,64");
    Maintenant on a un vector ou list d'attributs
    Tu peux prendre un std::multimap ou std::map qui comprendra toutes les tuiles référencées selon l'id.
    Ce sera donc un std::map< std::string, std::vector<std::string>>> bref une sorte de vecteur de vecteurs.
    Est-ce que c'est clair pour toi ?
    tu peux utiliser TinyXML pour décoder les fichiers XML
    http://www.grinninglizard.com/tinyxml/

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par TheDrev
    quand la définition de la structure map change
    Tu peux donner un exemple de ce que tu sous-entends stp ? MatM et Nouk² répondent à 2 problématiques différentes que ta question soulève selon l'interprétation qui en est faite

    Citation Envoyé par Mat.M Voir le message
    tu peux utiliser des fichiers de descriptions d'entité xml :
    Pourquoi toujours XML ?
    JSon a de sérieux atouts (plus facile à manipuler, plus facile à lire comme fichier texte vu que tu n'as pas tout le "bruit" que tu obtiens avec xml)

  5. #5
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut
    merci pour ces infos !
    Je m'en servirai quand je ferai un projet en C++ (j'ai dans l'idée de faire un T-RPG pilotée par UML d'ailleurs)

    Pour mes projets C en cours, je n'utilise pas de liste chainées (enfin pas pour les tiles en tout cas) mais un tile**. J'ai aussi pensé a décrire les cartes en lua, ce qui reste envisagable. J'ai reussi quelques teste avec un fichier .txt contenant les types de la cartes (int, long, pointeur...) dans l'ordre dans lesquels ils apparaissent dans la structure carte, ce qui me permet ensuite de tomber juste lors de la lecture de la carte dans le jeu (en convertissant le type en nombre d'octet... peu importe le noms des variables finalement).
    all your base are belong to us.

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Pourquoi toujours XML ?
    JSon a de sérieux atouts (plus facile à manipuler, plus facile à lire comme fichier texte vu que tu n'as pas tout le "bruit" que tu obtiens avec xml)
    Oui tout à fait je citais XML parce que c'est un exemple parmi d'autres.
    Sinon j'ai cogité là-dessus hier un tel éditeur peut se faire au moyen de "plugins" c.a.d. à l'aide d'un langage script comme Lua ou AngelScript ( ou sa propre grammaire son propre analyseur syntaxique).
    C'est plus souple ainsi

Discussions similaires

  1. Jeux video : Editeur de cartes 2D
    Par Dooxe dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 14/11/2013, 16h47
  2. Editeur de carte / map editor
    Par Scheb dans le forum Logiciels de création de jeux vidéo
    Réponses: 5
    Dernier message: 22/02/2011, 10h16
  3. texture et image - Editeur de carte
    Par poussinphp dans le forum XNA/Monogame
    Réponses: 2
    Dernier message: 11/02/2009, 14h20
  4. [2D] Editeurs de carte
    Par <Zer0> dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 17/09/2007, 19h07
  5. Editeur de carte
    Par countag dans le forum SDL
    Réponses: 8
    Dernier message: 22/02/2006, 22h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo