Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Talchane le Octobre 13, 2019, 03:59:03 pm

Titre: Bug texture sprite
Posté par: Talchane le Octobre 13, 2019, 03:59:03 pm
Bonjour à toutes et à tous,

J'ai un problème dans un code concernant les textures de mes sprites. J'ai répertorié tous les sprites dans un vector. Lorsque l'on appui sur entrée, toutes les secondes, un sprite s'ajoute au vector. Seul le dernier ou les derniers sprite de mon vector sont affichés correctement. Les autres apparaissent sous forme d'un rectangle blanc.

Voici un lien permettant d'observer le résultat de mon coté lors de l'exécution du code :
https://vimeo.com/user103895169/download/366074196/34f5910ce1

J'ai joint mon code ainsi que mon image qui est à placer dans un dossier nommé "Sounds-Graphics" qu'il faut mettre dans le même dossier que le source.

Merci.
Titre: Re: Bug texture sprite
Posté par: draconubs le Octobre 13, 2019, 10:41:18 pm
Ne charge qu'une seul fois la texture et passe la dans le constructeur.

#include <SFML/Graphics.hpp>
#include <iostream>
#include <random>

#define screen sf::Vector2f(1600, 900)

class character :public sf::Drawable
{
public:

        sf::Sprite sprite_character;

        character(sf::Vector2f pos, sf::Texture& texture)
        {
                sprite_character.setTexture(texture);
                sprite_character.setOrigin((texture.getSize().x / 2), (texture.getSize().y / 2));
                sprite_character.setPosition(pos);
        }

private:

        virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
                target.draw(sprite_character, states);
        }
};


int main()
{
        srand(time(NULL));
        std::vector<character> sprites;

        sf::RenderWindow window(sf::VideoMode(screen.x, screen.y), "Game");
        window.setVerticalSyncEnabled(true);

        sf::Event event;
        sf::Clock clock;

        sf::Texture tex_character;
        if (!tex_character.loadFromFile("Content/player.png")) // ????????????????
                return EXIT_FAILURE;

        while (window.isOpen())
        {
                sf::Time time = clock.getElapsedTime();

                while (window.pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                                window.close();
                }

                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Enter))
                {
                        if (time.asSeconds() >= 1)
                        {
                                time = sf::Time::Zero;
                                clock.restart();

                                int pos_x = rand() % (int)screen.x;
                                int pos_y = rand() % (int)screen.y;

                                sprites.push_back(character(sf::Vector2f(pos_x, pos_y), tex_character));
                        }
                }

                window.clear(sf::Color(0, 0, 0));

                for (unsigned int i = 0; i < sprites.size(); ++i)
                        window.draw(sprites[i]);

                window.display();
        }

        return 0;
}
 
Titre: Re: Bug texture sprite
Posté par: Talchane le Octobre 14, 2019, 06:33:46 pm
Bonjour draconubs et merci beaucoup pour ta réponse, mon problème est maintenant arrangé et le code est bien plus optimisé comme ça.

Le sujet est à présent résolu.