Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML] Passer un sprite en référance à un membre statique

    16 décembre 2007 à 19:27:56

    Salut,

    Je suis en train de coderune classe qui permet de charger les images plus facilement mais j'ai un problème :
    Lorsque j'affiche les sprites, je me retrouve avec une fenetre blanche.

    Voici mon code :
    La fonction
    1. void DonneesJeu::ChargementImage(sf::Sprite& Sprite, std::string chemin)
    2. {
    3.    std::ofstream err("errorlog.txt");
    4.    sf::Image img;
    5.    try
    6.    {
    7.       if(!img.LoadFromFile(chemin.c_str()))
    8.       throw chemin;
    9.    }
    10.    catch(std::string fichiercomplet)
    11.    {
    12.       std::string nom_fichier;
    13.       nom_fichier = fichiercomplet.substr(fichiercomplet.find_last_of('/')+1);
    14.       err << "Impossible de d'ouvrir \"" << nom_fichier << "\"" << std::endl;
    15.    }
    16.    img.SetSmooth(false);
    17.    Sprite.SetImage(img);
    18.    err.close();
    19. }


    Appel de la fonction:
    1. DonneesJeu::ChargementImage(Terrain, "images/terrain.jpg");
    2.     DonneesJeu::ChargementImage(PadDroit, "images/paddroit.png");
    3.     DonneesJeu::ChargementImage(PadGauche, "images/padgauche.png");
    4.     DonneesJeu::ChargementImage(Balle, "images/balle.png");
    5.     DonneesJeu::ChargementImage(Menu, "images/menu.png");
    6.     DonneesJeu::ChargementImage(MeilleurScores, "images/meilleurscore.png");
    7.     DonneesJeu::ChargementImage(ExplicationJ1, "images/ExplicationJ1.png");
    8.     DonneesJeu::ChargementImage(ExplicationJ2, "images/ExplicationJ2.png");


    Mais je me retrouve avec un fenetre blanche.

    merci de vos réponses.
    • Partager sur Facebook
    • Partager sur Twitter
      16 décembre 2007 à 19:58:57

      Simple: ton instance de sf::Image est déclarée localement. A la fin de la fonction, elle est suprimmée. La fonction setImage ne crée pas de copie de l'image dans le sprite: elle lui envoie juste un pointeur. Aussi, a la fin de la fonction, ton instance de sf::Image est détruite; ton sf::sprite garde un pointeur sur un objet qui a été détruit.
      Il faut que ton instance de sf::Image persiste au momment ou tu affiche ton sprite. C'est dans la classe sf::image, et dans rien d'autre, qu'est stockée ton image.

      Si tu veux simplifier le chargement d'image, essaye ca:

      1. class img_sprite : sf::Sprite, sf::Image
      2. {
      3. public:
      4. img_sprite();
      5. ~img_sprite();
      6. void Load(std::string chemin);
      7. }
      8. void img_sprite::Load(std::string chemin)
      9. {
      10. LoadFromFile(chemin);
      11. setSmooth(false);
      12. setImage(*this);
      13. }


      En modifiant selon tes besoins.
      Cordialement,
      Loumnam.
      • Partager sur Facebook
      • Partager sur Twitter

      [SFML] Passer un sprite en référance à un membre statique

      × 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