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

Auteur Sujet: Failed to load image "tileset.png". Reason: Unable to open file  (Lu 8017 fois)

0 Membres et 1 Invité sur ce sujet

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
'jour
Après j'arrive pas à utiliser SFML, maintenant, c'est: j'arrive pas à open a file.
J'ai repris l'exemple de tile mapping sur SFML 2.2.
J'ai quand même fait quelques modifications car j'aime pas les fuites de mémoire:
bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height)
    {
        // on charge la texture du tileset
        if (!m_tileset.loadFromFile(tileset))
            return false;

        // on redimensionne le tableau de vertex pour qu'il puisse contenir tout le niveau
        m_vertices.setPrimitiveType(sf::Quads);
        m_vertices.resize(width * height * 4);

        // on remplit le tableau de vertex, avec un quad par tuile
        for (unsigned int i = 0; i < width; ++i)
            for (unsigned int j = 0; j < height; ++j)
            {
                // on récupère le numéro de tuile courant
                int tileNumber = tiles[i + j * width];

                // on en déduit sa position dans la texture du tileset
                int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
                int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);

                // on récupère un pointeur vers le quad à définir dans le tableau de vertex
                sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

                // on définit ses quatre coins
                quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
                quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
                quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
                quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);

                // on définit ses quatre coordonnées de texture
                quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
                quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
                quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
                quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);

                delete quad;
                quad = 0;
            }

        delete tiles;
        tiles = 0;
        return true;
    }

Je teste le code... aucune erreur de compilo... il s'exécute...
Failed to load image "tileset.png". Reason: Unable to open file
Err Arr.
Je fais quoi moi ? o_o.
Merci  :)

PS: oui, j'ai vérifié, j'ai bien tileset.png ET dans le dossier debug ET dans le dossier release ET dans le dossier des codes sources.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #1 le: Mars 07, 2015, 07:08:52 pm »
Dans les options de ton projet il y a un truc du genre "working directory" (répertoire de travail). C'est là que tu dois mettre ton fichier. Ou, plus intelligent : modifie cette option pour indiquer le répertoire que toi tu veux utiliser (en général : le répertoire de l'exécutable, comme ça pas de différence entre exécuter depuis l'IDE et depuis l'explorateur de fichiers).

Citer
J'ai repris l'exemple de tile mapping sur SFML 2.2.
J'ai quand même fait quelques modifications car j'aime pas les fuites de mémoire:
T'as juste introduit plein de bugs dans le code. Je te conseille de revoir tes bases en C++, là tu n'iras pas bien loin avec ce genre de pratiques (hint : ton code va planter à la première exécution). Faudra pas non plus venir pleurer ici, tu sais quelle sera la solution (remettre le code tel qu'il est dans le tutoriel) ;)
« Modifié: Mars 07, 2015, 07:11:13 pm par Laurent »
Laurent Gomila - SFML developer

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #2 le: Mars 07, 2015, 07:20:11 pm »
Hein ? J'ai juste fait les deletes des pointeurs, où est le problème ?
Et si je l'ai enlève, comment peux-tu être sûr que j'aurai pas de fuite de mémoire ?
PS: tu devrais ajouter ce fichier dans le tuto pour un téléchargement rapide du tileset:

« Modifié: Mars 07, 2015, 07:23:28 pm par S66 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #3 le: Mars 07, 2015, 07:23:27 pm »
C'est à peu près à la première page de tout livre de C++ qu'on apprend que delete ne doit être utilisé que pour la mémoire allouée avec new. Là on ne fait que prendre les adresses de variables existantes, il n'y a aucune allocation de mémoire. Donc il n'y a rien à libérer.
Laurent Gomila - SFML developer

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #4 le: Mars 07, 2015, 07:24:10 pm »
Ah... j'avais pas vu ça, sorry.

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #5 le: Mars 07, 2015, 07:26:48 pm »
Je ré-essaie en faisant copier-coller du code du tuto...
Toujours la même erreur: Failed to load image "tileset.png". Reason: Unable to open file

(mes headers sont pourtant:
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <string>
Bizarre)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #6 le: Mars 07, 2015, 07:39:46 pm »
Tu as lu la réponse que je t'ai donnée au tout début de mon premier post ?
Laurent Gomila - SFML developer

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #7 le: Mars 07, 2015, 08:36:16 pm »
Oui. Et j'ai mis le tileset.png que dans le working dir/debug et /release.
Toujours pareil...

victorlevasseur

  • Full Member
  • ***
  • Messages: 206
    • Voir le profil
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #8 le: Mars 07, 2015, 08:44:02 pm »
Dans C::B, le working directory par défaut est le dossier du projet, mais pas celui de l'exécutable (tu peux changer cela dans les paramètres du projet).

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #9 le: Mars 07, 2015, 08:46:14 pm »
Et quand tu lances directement ton .exe sans passer par l'IDE ça fonctionne ? :)

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
Re : Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #10 le: Mars 08, 2015, 09:30:42 am »
Dans C::B, le working directory par défaut est le dossier du projet, mais pas celui de l'exécutable (tu peux changer cela dans les paramètres du projet).
Oui, dans CB, mais là je suis sous Qt...

Et quand je vais dans Projets, et que je regarde le répertoire de compilation il me met:
....../............/build-tilemap-Desktop_Qt_5_2_1_MinGW_32bit-Debug
C'est là que j'ai mis mon tileset. ^
« Modifié: Mars 08, 2015, 09:32:53 am par S66 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #11 le: Mars 08, 2015, 09:40:57 am »
Citer
Oui, dans CB, mais là je suis sous Qt...
J'imagine que tu veux dire QtCreator (Qt c'est le framework, pas l'IDE). Et bien sûr on aurait dû le deviner.

Citer
Et quand je vais dans Projets, et que je regarde le répertoire de compilation il me met:
....../............/build-tilemap-Desktop_Qt_5_2_1_MinGW_32bit-Debug
C'est là que j'ai mis mon tileset. ^
http://lmgtfy.com/?q=qtcreator+working+directory
Laurent Gomila - SFML developer

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #12 le: Mars 08, 2015, 07:32:44 pm »
Euh Laurent, tu m'aides pas...
J'ai dit dans mon msg le répertoire de travail/compilation.
Alors, je fait quoi ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #13 le: Mars 08, 2015, 10:37:11 pm »
Citer
J'ai dit dans mon msg le répertoire de travail/compilation.
Non, tu as parlé de répertoire de compilation.

Ca fait longtemps que tu as atteint ma limite de patience, alors si maintenant tu commences à faire preuve de mauvaise foi, et en plus me dire que je ne t'aide pas... Je vais être sympa et simplement arrêter de te répondre.
Laurent Gomila - SFML developer

S66

  • Full Member
  • ***
  • Messages: 120
  • *-*
    • Voir le profil
    • Teal
Re : Failed to load image "tileset.png". Reason: Unable to open file
« Réponse #14 le: Mars 09, 2015, 06:46:10 pm »
C'est ça, n'aide pas une personne dans le besoin
Non, non, j'ai rien dit !

 

anything