Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML] loadFromFile ne fonctionne pas.

    21 septembre 2017 à 22:36:03

    Bonjour,

    J'ai essayé plusieurs noms de fichier et d'emplacement mais le résultat est le même, l'ordinateur ne considère pas la chaîne de caractère comme fini et continue de lire les cases mémoires suivante jusqu'à ce que ça plante. (J'ai aussi essayé de mettre '\0' à la fin de la fonction)

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2017 à 4:03:23

      Salut,

      Au lieu de nous montrer un screenshot totalement illisible car trop petit (je suis un vieux con chiant et myope), pourrais tu nous faire un copier coller du code en utilisant la balise ad-hoc (c'est le bouton qui a la forme de < / > juste au dessus de la zone de texte)?

      Ce sera plus facile pour tout le monde ;)

      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        22 septembre 2017 à 8:49:28

        Ce double pointeur me fait mal aux yeux :)

        • Partager sur Facebook
        • Partager sur Twitter

        git is great because Linus did it, mercurial is better because he didn't.

          22 septembre 2017 à 10:32:46

          A mon avis, ce n'est pas loadFromFile qui plante, mais ton allocation dynamique, qui au passage, est buggée (mot clef: new).
          Je suspecte également que le parcours du tableau resultant soit bancale.

          En C++ moderne, on préfère utiliser le conteneur de la librairie standard vector pour les tableaux dynamiques. Les pointeurs nu posent énormément de problèmes hors de portée des débutants, et l'operateur new peux jeter des exceptions, ce dont tu ne t'es pas préoccupé.

          • Partager sur Facebook
          • Partager sur Twitter
            22 septembre 2017 à 19:34:32

            Merci de vos réponse :).

            Ce n'est pas l'allocation dynamique qui fait planter loadFromFile, j'ai testé sans tout ce qui est tableau dynamique

            int main()
            {
                sf::RenderWindow window(sf::VideoMode(1800, 900), "La plus belle case du monde");
            	Archer p1;
            	int x = window.getSize().y/12;
            	int y = window.getSize().y/12;
            	sf::Image vide;
            	static const int L = window.getSize().x/x;
            	std::string str = "vide.png";
            	if (!vide.loadFromFile(str))
            		return -1;
            	//Création du tableau de Case
            	vector<vector<Case>> tableau(L);
            
            	for (int cmpt = 0; cmpt < L; cmpt++)
            		tableau[cmpt] = vector<Case>(7);
            for (int cX = 0; cX < L; cX++) { for (int cY = 0; cY < 7; cY++) { tableau[cX][cY].SetCase(&x, &y, &window); } } while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(sf::Color(100, 100, 100, 0)); //Affichage des Cases for (int cX = 0; cX < L; cX++) { for (int cY = 0; cY < 7; cY++) tableau[cX][cY].show(cX*x,cY*y); } window.display(); } return 0; }

            pour le monsieur myope ;)

            -
            Edité par corentin soulet 22 septembre 2017 à 19:45:19

            • Partager sur Facebook
            • Partager sur Twitter
              22 septembre 2017 à 19:59:38

              C'est bien aimable à toi... Mais tu peux m'appler koala (voir koala01), comme tout le monde ;)
              • Partager sur Facebook
              • Partager sur Twitter
              Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                25 septembre 2017 à 9:25:26

                Linéarise ton tableau, c'est scandaleux de faire un vector de vector.

                • Partager sur Facebook
                • Partager sur Twitter

                git is great because Linus did it, mercurial is better because he didn't.

                  25 septembre 2017 à 10:01:20

                  C'est pas moi qui l'ai fait :D

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                    25 septembre 2017 à 11:15:07

                    Tu as opté pour le conteneur vector, ce qui est deja un progrès (a la limite, on s'occupera de la linearisation plus tard, ce n'est pas ce qui pose probleme).

                    Les indices / taille de tableau ne peuvent être négatif, utilise au moin un type non  signé, ou le type fournit par la STL: std::size_t.
                    Je voit des variables non déclarées (globales ?)
                    Pourquoi une variable statique dans la fonction main ? Elle n'est appelée qu'une seule et unique fois.
                    Le remplissage du tableau me parais douteux, j'aurais plutot fais quelque chose comme suit:

                    std::vector<std::vector<case>> tableau;
                    for(std::size_t i=0; i<L; ++i)
                    {
                    	std::vector<case> ligne;
                    	for(std::size_t j=0; j<7; ++i)
                    		ligne.push_back(case());
                    	tableau.push_back(ligne);
                    }
                    Tu charges (un sf::sprite ? global ?) via loadFromFile, qu'en fais-tu ensuite ? ta fonction main ne montre rien de ce coté la.
                    Qu'est ce que la classe case ? (montre la).
                    Pour parcourir un conteneur de la STL, soit on lui demande sa taille, soit on utilise des iterateurs, soit on utilise la boucle for .. each.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [SFML] loadFromFile ne fonctionne pas.

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown