Partage
  • Partager sur Facebook
  • Partager sur Twitter

SFML méthode loadFromFIle, problème de chargement

Sujet résolu
    23 juin 2018 à 12:07:55

    Bonjour, en utilisant la SFML je me suis heurté à un problème avec la méthode loadFromFile. Lorsque que j'utilise cette méthode dans une fonction, dans un constructeur ou dans une méthode, je vois apparaître le messages : "Unable to load file". Pour information j'ai essayer le code sur différent IDE et système d'exploitation (Linux, Windows, Visual Studio, Code::Blocks, Makefile, etc ... ), rien n'a voulu fonctionner ... 

    Voici le code que j'ai tester :

    #include <SFML/Graphics.hpp>
    #include <string>
    #include <iostream>
    
    void load(sf::Sprite spt_to_modifiy, const std::string filename)
    {
        sf::Texture text_load;
        if(!text_load.loadFromFile(filename));
            throw std::runtime_error("error when loading file " + filename);
    
        spt_to_modifiy.setTexture(text_load);
        spt_to_modifiy.setPosition(100.f, 100.f);
    }
    
    
    int main()
    {
        sf::RenderWindow app(sf::VideoMode(640,480), "SFML test");
    
        sf::Sprite spt_to_draw;
        load(spt_to_draw, "ressource/texture/Bullet.png");
    
        while(app.isOpen())
        {
            sf::Event event;
            while(app.pollEvent(event))
            {
                switch(event.type)
                {
                    case sf::Event::Closed:
                        app.close();
                        break;
                }
            }
            app.clear();
            app.draw(spt_to_draw);
            app.display();
        }
        return 0;
    }
    Merci d'avance pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2018 à 16:35:23

      Hello,

      Première chose, le sprite que tu passes à ta fonction ne sera jamais modifié car ici tu fais un passage par copie, utilise une référence. Et dans l'état actuel de ton code, tout ce que tu afficheras c'est un sprite vide.

      Ensuite, lorsque l'on crée une variable, celle-ci est détruite en fin de scope. Donc ta texture existe uniquement dans la fonction load(...). Or une texture doit exister tant que le programme tourne, ou du moins tant qu'elle est utilisée. Un sprite étant une "représentation" d'une texture chargée en mémoire, si celle-ci n'existe plus... ça va pas le faire, le sprite n'aura rien a afficher.

      Autre chose, j'imagine que c'est une erreur d'inattention mais, si tu ne retires pas le " ; " qui signale une fin d'instruction au niveau de ta condition qui vérifie le chargement de la texture, tu te prendras à tous les coups l'exception qui suit.

      Dernière chose, vérifie bien le chemin de ta texture, la première erreur vient de là.

      Maintenant je peux te conseiller de revoir ta fonction, plutôt que d'essayer de charger une texture et de modifier un sprite, elle devrait juste en créer un basé sur une texture préalablement chargée que tu passerais à cette fonction, histoire de bien séparer les tâches entre le chargement de la texture et la création d'un sprite. Ce sont 2 choses différentes.

      -
      Edité par Guit0Xx 23 juin 2018 à 17:26:59

      • Partager sur Facebook
      • Partager sur Twitter

      ...

        23 juin 2018 à 20:17:54

        Merci beaucoup pour ton aide, je comprend mieux certains aspects de la SFML maintenant. Et j'ai par ailleurs réussi à résoudre mes problèmes ;-)
        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2018 à 2:49:04

          Salut,

          Et si tu n'arrives toujours pas à charger le fichier après cela:

          1- vérifie que le chemin d'accès vers le fichier est correct : s'il s'agit d'un chemin relatif, il sera calculé à partir du dossier d'exécution de ton programme ;)

          2- vérifie que tu as les droits d'accès requis pour accéder au fichier que tu veux charger.

          3- vérifie (mais le problème se pose essentiellement sous windows) que le fichier en question n'est pas utilisé par une autre application lorsque tu essayes de le charger.

          Certaines applications ont en effet la fâcheuse habitude de placer un "lock" qui signal au système d'exploitation qu'il doit empêcher l'accès au fichier qu'elles utilisent.

          C'est surtout (mais pas uniquement) le cas pour les applications qui ont pour objectif de modifier le fichier en question ;)

          • 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
            24 juin 2018 à 12:37:33

            Merci beaucoup pour ton aide, je ferai attention à ces détails la prochaine fois ^^
            • Partager sur Facebook
            • Partager sur Twitter

            SFML méthode loadFromFIle, problème de chargement

            × 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