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

Auteur Sujet: Bug texture sprite  (Lu 2165 fois)

0 Membres et 2 Invités sur ce sujet

Talchane

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
    • E-mail
Bug texture sprite
« 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.
« Modifié: Octobre 13, 2019, 06:29:50 pm par Talchane »

draconubs

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Re: Bug texture sprite
« Réponse #1 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;
}
 
« Modifié: Octobre 13, 2019, 10:44:19 pm par draconubs »

Talchane

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
    • E-mail
Re: Bug texture sprite
« Réponse #2 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.