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

C++ Discussion :

[SFML/2D] Le Mapping


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut [SFML/2D] Le Mapping
    Salut à tous et à toutes ^^

    Cela fait quelque temps que j'essaye de faire un petit jeu de plateforme en c++ avec la bibliothèque SFML.

    Mais malheureusement, je bloque sur le mapping :/ Je n'ai jamais trouvé un tutoriel, ou une personne pouvant m'expliquer une bonne fois pour toutes ^^
    Je me suis penché sur le tileMapping, mais je trouve cette technique assez "mauvaise" car celui qui veut modifier la map n'à qu'à modifier le fichier map.txt ^^

    Donc voila je cherche un moyen d'afficher des maps en c++ avec SFML 2
    Voila ce que sa donner :

    map.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    5 4
    0 0 0 0
    0 0 0 0
    0 0 0 0
    0 0 0 0
    0 0 0 0
    le code je le gardais en mémoire dans une matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #ifndef MATRIX_H_INCLUDED
    #define MATRIX_H_INCLUDED
     
    #include <vector>
    #include <cassert>
    #include <iostream>
    #include <fstream>
     
    template<class T>
    class Matrix
    {
    public:
        Matrix(std::size_t width, std::size_t height, T const& t = T{}) :
            w(width),
            h(height),
            datas(w*h, t) {}
        Matrix(Matrix const& m) = default;
        Matrix& operator=(Matrix const& m) = default;
     
     
        T const& operator()(std::size_t x, std::size_t y) const
        {
            assert(x < w && y < h && "Out of Bound");
            return datas[y*w+x];
        }
    T& operator()(std::size_t x, std::size_t y)
        {
            assert(x < w && y < h && "Out of Bound");
            return datas[y*w+x];
        }
     
        std::size_t width() const{ return w; }
        std::size_t height() const{ return h; }
    private:
        std::size_t w;
        std::size_t h;
        std::vector<T> datas;
    };
     
    #endif // MATRIX_H_INCLUDED
    Merci à tous et à toutes ^^

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    le tile-mapping n'a rien à voir avec la map elle-même, mais à la manière d'afficher chaque case.
    A savoir, utiliser une unique texture contenant le dessin de chaque type de case, et dessiner à la position de chacune la partie qui convient.

    Tu peux le faire avec un tas de sprite et Sprite::setTexCoord.

    Après, à toi de voir comment tu définis la map elle-même.
    Tu as le choix entre:
    • dans le binaire, sous forme d'une variable créée en dur, ce qui signifie un recompilation pour changer une case d'une carte;
    • dans un fichier simple à éditer, tel qu'un format texte.
    • dans un fichier complexe à éditer, tel qu'un flux binaire, compressé, et pourquoi pas chiffré.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    En fait, tu as deux besoins réels.

    Créer une variable contenant effectivement ta carte, telle qu'utilisable par ton jeu. (une classe Game::Map, par exemple)
    Savoir l'afficher avec l'UI.

    Le tile-mapping répond au deuxième besoin, ton fichier au premier.
    Il te faudra tout de même négocier ton interface entre le jeu et l'UI.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut
    Donc, j'aimerai bien le faire par fichier compresser comme tu dis, mais je vais déjà m’entraîner avec quelque chose de simple, avec le fichier texte.
    Tu aurait un tutoriel ? En c++ ?
    Sinon je cherche de mon côté merci... Même si c'est difficile au départ ^^

    Edit: Sinon tu as des exemples en c++/sfml de map ? Si oui, je peux jeter un coup d'oeil ?

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    à toi de choisir ce que tu veux stocker.
    En général, il y a deux blocs dans un fichier de niveau: la géographie (la map en elle-même) et la population.
    Tu peux faire deux fichiers, ou tout dans le même.

    Par exemple, une map pourrait être:
    home sweet home
    prairie.png
    10
    #numéro dans la tileset, blocant, nom /commentaire
    0 0 herbe
    1 1 arbre
    2 1 caillou
    3 1 mur avec porte
    4 1 toit
    5 1 eau
    6 1 cote ouest
    7 1 cote nord
    8 1 cote pointe nord-ouest
    9 1 cote crique nord-ouest
    5 5 5 5 5 6 2 2 1
    5 5 5 8 7 9 0 0 1
    5 8 7 9 4 0 0 0 1
    5 6 0 0 3 0 0 0 1 
    5 6 0 0 0 0 0 1 1
    5 6 0 0 0 0 0 1 1
    5 6 2 2 2 0 1 1 1
    
    Et le code serait à base d'une structure définissant une nature de case, et d'une grille de numéros (cf faq C++, questions sur les matrices)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct type_case{
        int numero;
        bool traversable;
        std::string commentaire;
    };
    il suffit d'une map<int, type_case> pour faire la correspondance entre la grille et les types.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 6
    Par défaut
    Donc en gros je lis le fichier, je le stock dans une matrice et j'affiche la map quoi ^^
    Je vais essayez et je te dit
    Sinon pour la lecture de fichier j'utilise iostream hein ? ^^

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est parmi les choix les plus communs, et souvent le plus direct.
    N'oublie pas Comment lire un fichier ligne par ligne ?.

Discussions similaires

  1. [SFML]Problème Tile Mapping
    Par Charvalos dans le forum Bibliothèques
    Réponses: 19
    Dernier message: 30/09/2010, 10h44
  2. Cube mapping SFML
    Par coda_blank dans le forum SFML
    Réponses: 3
    Dernier message: 22/08/2009, 22h58
  3. Réponses: 2
    Dernier message: 11/07/2003, 18h24
  4. Problème avec memory mapping
    Par gemai dans le forum C
    Réponses: 13
    Dernier message: 04/07/2003, 09h50
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

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