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

Auteur Sujet: [Résolu] Problème avec un vector de classes + sprites  (Lu 2364 fois)

0 Membres et 2 Invités sur ce sujet

Soren Usulian

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
[Résolu] Problème avec un vector de classes + sprites
« le: Mars 13, 2013, 06:15:44 pm »
Bonjour à tous, ça fait quelques jours que je bloque sur un soucis, alors peut être j'ai mal pensé mes classes mais je n'arrive plus à avancer, en fait j'ai ma fenêtre qui s'ouvre à la fin de la compilation et qui est noire comme si il n'y avait pas de sprite.

Voici deux fonctions qui sont utilisé dans le main :

int Map::loadTiles() // Creation of instance of tile
    {
        int x(0), y(0), i(0), numberOfTiles(0);
        sf::Texture texture;
        if(!texture.loadFromFile("texture.png"))
            return EXIT_FAILURE;

        for(y=0;y <= 384; y = y + 32)// Y
            {
                for(x=0;x <= 800; x = x + 32)// X
                {
                    listTiles.push_back(new Tile (x,y));
                    log << "x = " << x << " ; y = " << y <<endl;
                    i++;
                }
            }
        return 0;
    }
 

int Map::displayTiles() // Displaying of tiles
    {
        int i(0), numberOfTiles(0);
        numberOfTiles = ceil((384/32)*(800/32));
        sf::RenderWindow window(sf::VideoMode(800, 600), "Map");
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
            window.clear();

            for(i=0;i <= numberOfTiles; i++) // Draw all the tiles
            {
                listTiles[i]->getSprite().setPosition(listTiles[i]->getCoordinates());
                window.draw(listTiles[i]->getSprite());
            }

            window.display();
        }

    }

 

Merci d'avance.
« Modifié: Mars 15, 2013, 05:54:54 pm par Soren Usulian »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème avec un vector de classes + sprites
« Réponse #1 le: Mars 14, 2013, 03:32:52 am »
Ta sf::Texture est détruite à la fin de sa portée.
Est-ce que getSprite renvoie une référence ?

Soren Usulian

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Re : Problème avec un vector de classes + sprites
« Réponse #2 le: Mars 14, 2013, 06:34:16 pm »
 Bah, j'ai pensé pour ma texture et je viens de résoudre partiellement mon problème : j'ai mis dans ma classe temporairement une texture qui se charge à la construction des instances de mes tiles, comme ceci :
    Tile::Tile(int x, int y) : m_coordinates(x, y)
    {
        m_texture.loadFromFile("texture.png");
        m_sprite.setPosition(m_coordinates);
        m_sprite.setTexture(m_texture);
    }
 

mais si je ne positionne pas mon sprite à la construction, il ne se positionne pas quand je les affiche :
 int Map::displayTiles() // Displaying of tiles
    {
        int i(0), numberOfTiles(0);
        numberOfTiles = ceil((384/32)*(800/32));
        sf::RenderWindow window(sf::VideoMode(800, 600), "Map");
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
            window.clear();

            for(i=0;i < numberOfTiles; i++) // Draw all the tiles
            {
                listTiles[i]->getSprite().setPosition(listTiles[i]->getCoordinates()); // C'est donc ici le soucis
                window.draw(listTiles[i]->getSprite());
            }

            window.display();
        }

 

mccusti

  • Invité
Re : Problème avec un vector de classes + sprites
« Réponse #3 le: Mars 15, 2013, 09:49:21 am »
Il faut que getSprite() retourne une référence. Dans ton code le setPosition() s'effectue sur une copie temporaire et non sur le sprite original.

Soren Usulian

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Re : Problème avec un vector de classes + sprites
« Réponse #4 le: Mars 15, 2013, 10:22:59 am »
Oui, c'est ce que je viens de faire, j'ai redéfini ma fonction getSprite() et ça marche mieux, merci beaucoup.
« Modifié: Mars 15, 2013, 11:29:34 am par Soren Usulian »