Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: question sur l'exemple de tilemap  (Lu 5448 fois)

0 Membres et 2 Invités sur ce sujet

tenkai188

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
question sur l'exemple de tilemap
« le: Juillet 23, 2017, 07:36:06 pm »
Bonjour,

je débute en c++ ainsi que dans l'utilisation de SFML et j'ai une question concernant les tileMap.

j'ai (en suivant le tuto : https://www.sfml-dev.org/tutorials/2.4/graphics-vertex-array-fr.php) créé une map.
Est-il possible de remplir le tableau level (créé et utilisé dans l'exemple) avec un fichier txt ? Si oui, comment ?
j'ai essayer de le faire en ouvrant le fichier en lecture et en utilisant un tableau dynamique mais je n'y arrive pas :(

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #1 le: Juillet 23, 2017, 08:44:57 pm »
Ca c'est du C++ de base, rien à voir avec la SFML ;)

Tu devrais plutôt t'orienter vers des livres / tutoriels / cours en ligne plus spécialisés, les entrées/sorties avec les fichiers textes ça fait partie des sujets de base, tu devrais facilement trouver ton bonheur.
Laurent Gomila - SFML developer

tenkai188

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #2 le: Juillet 23, 2017, 09:02:57 pm »
c'est ce que j'ai fait (je me base sur le tuto: https://openclassrooms.com/courses/programmez-avec-le-langage-c)
Mais probablement par ce que je débute, je n'arrive pas a faire quelque chose de correct :'(
Mon dernier essai:
std::ifstream monFlux("demoSol.txt");
        std::vector <int> tableau;
       
        std::string str;
        while (!monFlux.eof())
        {
                        int nombre;
                        monFlux >> nombre;
                        tableau.push_back(nombre);
                               
        }
       
        for (int a = 0; a < tableau.size(); a++)
        {
                std::cout << tableau[a] << std::endl;
        }
 

Merci quand même de m'avoir répondu ^^ et désolé si ma question étais hors sujet

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #3 le: Juillet 24, 2017, 07:59:21 am »
Le code correct serait :

int nombre;
while (monFlux >> nombre)
    tableau.push_back(nombre);

(il y a une autre version, mais c'est pour les gens un peu plus expérimentés ;))

Et donc, quel est la sortie que tu obtiens avec ton code ?
Laurent Gomila - SFML developer

tenkai188

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #4 le: Juillet 24, 2017, 04:10:45 pm »
Il y a quelque chose que je dois mal comprendre  :-\
j'ai d'abord ajouter ton code:
        std::ifstream monFlux("demoSol.txt");
        std::vector <int> tableau;
       
        int nombre;
        while (!monFlux.eof())
        {
                while (monFlux >> nombre);
                        tableau.push_back(nombre);
        }
       
        for (int a = 0; a < tableau.size(); a++)
        {
                std::cout << tableau[a] << std::endl;
        }
        std::cout << tableau.size() << std::endl;
       
 
Rien ne semble s'afficher.
Ensuite je me suis dit que c'était mon "while (!monFlux.eof())" qui devait poser problème. je l'ai donc supprimé:
        std::ifstream monFlux("demoSol.txt");
        std::vector <int> tableau;
       
        int nombre;
       
        while (monFlux >> nombre);
                tableau.push_back(nombre);
       
       
        for (int a = 0; a < tableau.size(); a++)
        {
                std::cout << tableau[a] << std::endl;
        }
        std::cout << tableau.size() << std::endl;
       
 
Et là quand je parcourt le tableau il n'affiche qu'un seul nombre et une taille de 1
Je suppose donc que le problème vient de la manière dont je lis le fichier
Mais je trouve pas de solution  :(

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #5 le: Juillet 24, 2017, 05:34:39 pm »
En effet il fallait retirer le "while (!monFlux.eof())".

Quel est le contenu de ton fichier ?
Laurent Gomila - SFML developer

tenkai188

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #6 le: Juillet 24, 2017, 06:11:12 pm »
Une liste d'entier séparé par des virgules.
"25,25,85,47,65,55,etc..."

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #7 le: Juillet 24, 2017, 07:11:15 pm »
Et comment std::ifstream est-il censé savoir que ton séparateur est la virgule ? Par défaut ce sont les espaces (et tabulations et retours à la ligne). Remplace donc ces virgules par des espaces, et ton code fonctionnera parfaitement.
Laurent Gomila - SFML developer

tenkai188

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #8 le: Juillet 24, 2017, 10:56:30 pm »

En fait je créé mes map avec un éditeur de map (Tiled) et je l'exporte ensuite sous forme de fichier txt (avec lequel j'utilise le même tileset) dans mon projet sfml .
Malheureusement les virgules sont ajouté automatiquement  :(
Est il possible d'utiliser une virgule comme séparateurs? si oui comment ?
Parce que sa risque de me prendre un moment pour enlevé les virgules a chaque map créé :(
Ou alors as tu une autre méthode a me conseiller pour créé et gérer les maps?

Dans tous les cas merci pour tes réponses et conseils. :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #9 le: Juillet 25, 2017, 07:50:23 am »
Il y a plein de projets ici qui traitent de l'importation de map issues de Tiled dans un programme SFML, tu as déjà regardé ?

Tu peux utiliser std::getline, qui accepte un troisième paramètre qui est le caractère de séparation. Ensuite, pour chaque sous-chaîne extraite, il faut refaire une conversion en entier. Ou alors tu lis tout ton fichier dans une chaîne, tu remplaces ',' par ' ', puis tu extraies comme tu le fais actuellement.
Laurent Gomila - SFML developer

tenkai188

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re: question sur l'exemple de tilemap
« Réponse #10 le: Juillet 25, 2017, 02:49:46 pm »
ok je vais jeter un coup d’œil à tous ça
encore merci  :)

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re: question sur l'exemple de tilemap
« Réponse #11 le: Août 05, 2017, 03:54:07 pm »
Attention aussi !

while (monFlux >> nombre);
    tableau.push_back(nombre);

Il ne faut pas mettre le point virgule à la fin du while !

SamFx06

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re: question sur l'exemple de tilemap
« Réponse #12 le: Septembre 20, 2017, 08:50:33 pm »
C'est pas un problème les virgules.
Sur le bloc note tu fais Edition>Remplacer
Dans rechercher tu mets "," et dans Remplacer Par tu mets " ".
Puis tu appuies sur Remplacer tout.
Il n'y a rien de compliqué!D'ailleurs la plupart des éditeurs de texte possède une fonction pour remplacer un mot par un autres.