Forum de la communauté SFML

Aide => Fenêtrage => Discussion démarrée par: Borax Kid le Mars 18, 2014, 09:56:26 pm

Titre: [Résolu] Bug avec isKeyPressed
Posté par: Borax Kid le Mars 18, 2014, 09:56:26 pm
Bonjour à tous.

Je suis en train de me créer un petit jeu et je viens de me rendre compte que lorsque je veux faire déplacer mon sprite avec les lettres du clavier, l'event est capté 2 fois, tandis que si je veux le faire déplacer (le même sprite) avec les flèches directionnelles, l'event est capté normalement.

Dans le premier cas, le sprite bouge donc 2 fois plus que dans le premier cas (20px au lieu de 10px).

Est-ce un bug connu? Si oui, comment puis-je le résoudre? Car même avec l'exemple d'utilisation de sprite ici : http://www.sfml-dev.org/documentation/2.1/classsf_1_1Texture.php le bug persiste.

Merci d'avance.
Titre: Re : Bug avec isKeyPressed
Posté par: math1992 le Mars 18, 2014, 10:29:44 pm
Sans un code minimal causant le problème, il est difficile de répondre.
Titre: Re : Bug avec isKeyPressed
Posté par: Borax Kid le Mars 19, 2014, 08:04:23 am
Citer
// Load a texture from a file
sf::Texture texture;
if (!texture.loadFromFile("texture.png"))
return -1;
// Assign it to a sprite
sf::Sprite sprite;
sprite.setTexture(texture);

while (app.isOpen())
    {
        // Process events
        sf::Event event;
        while (app.pollEvent(event))
        {
            // Close window : exit
            if (event.type == sf::Event::Closed)
                app.close();


                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
                        sprite.move(-10,0);
                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                        sprite.move(10,0);
                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                        sprite.move(0,10);
                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Z))
                        sprite.move(0,-10);

                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                        sprite.move(-10,0);
                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                        sprite.move(10,0);
                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                        sprite.move(0,10);
                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                        sprite.move(0,-10);
        }

        // Clear screen
        app.clear(sf::Color(185, 215, 255));
       
         app.draw(sprite);

        // Update the window
        app.display();
    }

Avec ce code, le sprite se déplace de 20 pixels avec les touches ZQSD et de 10 (ce que l'on veut) avec les flèches...
Titre: Re : Bug avec isKeyPressed
Posté par: Laurent le Mars 19, 2014, 08:35:12 am
C'est pas très malin d'avoir mis tout ça dans la boucle d'évènements ;)
Titre: Re : Bug avec isKeyPressed
Posté par: Borax Kid le Mars 19, 2014, 08:36:48 am
Oui je compte faire une classe à part pour gérer les events
Titre: Re : Bug avec isKeyPressed
Posté par: Laurent le Mars 19, 2014, 09:51:52 am
Je ne te parle pas de conception, là concrètement il faut juste bouger les appels à Keyboard::isKeyPressed hors de la boucle d'évènement pour avoir un comportement correct. Là c'est normal que ton code actuel produise des résultats bizarres, puisque tu ne bouges ton sprite que lorsqu'il se passe quelque chose plutôt que de manière continue.
Titre: Re : Bug avec isKeyPressed
Posté par: Borax Kid le Mars 19, 2014, 03:56:44 pm
Ah oui exact, je pensais que pour capter les touches pressées du clavier il fallait forcément être dans la boucle d'event, mais c'est absurde maintenant que j'y pense. Merci d'avoir répondu aussi vite, ça marche parfaitement.