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

Auteur Sujet: Affichage d'un sprite qui apparait en blanc ... parfois  (Lu 1897 fois)

0 Membres et 1 Invité sur ce sujet

Higestromm

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Affichage d'un sprite qui apparait en blanc ... parfois
« le: Juillet 01, 2015, 03:31:01 pm »
Bonjour,

Je code actuellement un mini GUI dont les widgets sont des images.

Donc pour pouvoir afficher une Frame par exemple j'utilise une image que je découpe en 9 et que je positionne comme il faut pour avoir quelque chose de propre.

Jusqu'ici tout vas bien...

La ou ca déconne c'est que pour éviter de charger 25 fois la même skin en mémoire, je place les images dans une classe dont je récupère un singleton pour accéder aux données :



class SFMLGuiData
{
/*---------------------------------*/
/*-- CONSTRUCTEURS / DESTRUCTEURS --*/
/*---------------------------------*/

public : SFMLGuiData(void);

public : ~SFMLGuiData(void);

/*----------------*/
/*-- ACCESSEURS --*/
/*----------------*/

public : static SFMLGuiData& SFMLGuiData::GetInstance();

/*----------------------*/
/*-- AUTRES FONCTIONS --*/
/*----------------------*/

public : void LoadGui(std::string p_guiName);

/*---------------------*/
/*-- DONNEES MEMBRES --*/
/*---------------------*/

public : sf::Texture tsframe[9];
public : int sFrameCutSize;
};


// Ici je récupère mon singleton
SFMLGuiData& SFMLGuiData::GetInstance()
{
        static SFMLGuiData guidata;
        return guidata;
}

void SFMLGuiData::LoadGui(std::string p_guiName)
{
        // Je charge mon image et je la découpe en 9 textures
        sf::Image img;
        img.loadFromFile("data/gui/" + p_guiName + "/sframe.png");

        sFrameCutSize = img.getSize().x/3;
        int i(0);
        for (int y(0);y<3;y++)
                for (int x(0);x<3;x++)
                {
                        i=y*3+x;
                        tsframe[i].loadFromImage(img,sf::IntRect(x*sFrameCutSize, y*sFrameCutSize, sFrameCutSize, sFrameCutSize));
                        tsframe[i].setRepeated(true);
                }
}
 


Avec ca je créer mon widget et je l'affiche comme suit :

SFrame::SFrame(....) :
{
        SFMLGuiData &data = SFMLGuiData::GetInstance();
        for (int i(0);i<9;i++) sframe[i].setTexture(data.tsframe[i]);
}

void SFrame::draw(sf::RenderTarget &p_target, sf::RenderStates p_states) const
{
        // On dessine la frame
        p_states.transform *= getTransform();
        for (int i(0);i<9;i++) p_target.draw(sframe[i], p_states);
}

Une SFrame est inclus dans un vecteur qui ressemble a ca :
private : std::vector<SWidget *> widgetList;

Le truc c'est que tout s'affiche correctement a partir du moment ou je ne quitte pas ma fenêtre de jeu pour en ouvrir une autre (en gros le vecteur de SWidget est détruit totalement et un autre est créer).
Des que je passe a une autre fenêtre j'ai une zone blanche qui apparait dans mon affichage.
Normalement mon singleton n'étant pas détruit, les textures ne doivent pas l'être et donc mes images devraient s'afficher correctement.

J'ai beau relire je ne trouve pas d'ou viens mon erreur.

Quelqu'un peux m'aider ?

Je vais poster des screenshots pour bien montrer

Higestromm

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : Affichage d'un sprite qui apparait en blanc ... parfois
« Réponse #1 le: Juillet 01, 2015, 03:44:54 pm »