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

Auteur Sujet: Chargement de texture et carré blanc (code de "SFML Game Development")  (Lu 1900 fois)

0 Membres et 1 Invité sur ce sujet

b4v

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Bonjour,

Je lis actuellement le livre "SFML Game Development" et je me retrouve au niveau du chapitre 2, face à un sprite qui affiche un carré blanc.
Pour être plus précis: Chapter2; Keeping Track of Your Textures – Resource Management; Accessing the textures; page 39.

Après un petite recherche, j'ai pu comprendre qu'un carré blanc proviendrait du fait que le sprite a perdu la référence sur la texture.
Etant un peu rouillé au niveau du C++ après trois ans de web, j'ai beau chercher je flanche et je n'arrive pas à trouver.

Voici dans un premier temps, une partie du .cpp de la class TextureHolder servant à gérer les textures.
La méthode texture->loadFromFile retourne bien true.
sf::Texture& TextureHolder::get(Textures::ID id)
{
        auto    found = this->mTextureMap.find(id);

        return (*found->second);
}

const sf::Texture& TextureHolder::get(Textures::ID id) const
{
        auto    found = this->mTextureMap.find(id);

        return (*found->second);
}

void TextureHolder::load(Textures::ID id, const std::string& filename)
{
        std::unique_ptr<sf::Texture> texture(new sf::Texture());
        texture->loadFromFile(filename);

        this->mTextureMap.insert(std::make_pair(id, std::move(texture)));
}
 

Ensuite, voici le constructeur de la classe Game où la texture est chargée et liée à un sprite.
La variable tDebug m'a permi de voir qu'une texture avec des informations cohérentes est bien renvoyée.
Game::Game()
        : mWindow(sf::VideoMode(640, 480), "SFML Application")
        , mPlayerPlane()
        , mMovementSpeed(MOVEMENT_SPEED)
{
        // Code voulu, non fonctionnel
        TextureHolder textures;
        textures.load(Textures::Airplane, "Media/Textures/Airplane.png");
        //sf::Texture& tDebug = textures.get(Textures::Airplane); // DEBUG
        this->mPlayerPlane.setTexture(textures.get(Textures::Airplane));

        // Code fonctionnel, le path de l'image est correct
        //this->mTexture.loadFromFile("Media/Textures/Airplane.png");
        //this->mPlayerPlane.setTexture(this->mTexture);

        this->mPlayerPlane.setPosition(100.f, 100.f);
}
 
Pour rendre le post plus lisible, j'ai omis une partie du code que je pourrais mettre si besoin est.

Si quelqu'un peut m'aider à comprendre pourquoi le sprite affiche un carré blanc il est bien sûr le bienvenu.

Merci.

PS: J'en profite pour dire bravo pour la SFML, c'est une belle librairie bien documentée avec un forum qui m'a l'air bien actif et compréhensif  :).

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Chargement de texture et carré blanc (code de "SFML Game Development")
« Réponse #1 le: Novembre 09, 2013, 09:51:25 pm »
TextureHolder textures; est déclaré dans Game::Game(), donc il est détruit à la fin de cette fonction.

b4v

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Re : Chargement de texture et carré blanc (code de "SFML Game Development")
« Réponse #2 le: Novembre 09, 2013, 10:10:59 pm »
Ah en effet, je me sens un peu bête maintenant.

Merci!