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

Auteur Sujet: [Résolu] Bug avec isKeyPressed  (Lu 2788 fois)

0 Membres et 1 Invité sur ce sujet

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
[Résolu] Bug avec isKeyPressed
« 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.
« Modifié: Mars 19, 2014, 03:56:59 pm par Borax Kid »

math1992

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
    • E-mail
Re : Bug avec isKeyPressed
« Réponse #1 le: Mars 18, 2014, 10:29:44 pm »
Sans un code minimal causant le problème, il est difficile de répondre.

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : Bug avec isKeyPressed
« Réponse #2 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...
« Modifié: Mars 19, 2014, 08:13:26 am par Borax Kid »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Bug avec isKeyPressed
« Réponse #3 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 ;)
Laurent Gomila - SFML developer

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : Bug avec isKeyPressed
« Réponse #4 le: Mars 19, 2014, 08:36:48 am »
Oui je compte faire une classe à part pour gérer les events

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Bug avec isKeyPressed
« Réponse #5 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.
Laurent Gomila - SFML developer

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : Bug avec isKeyPressed
« Réponse #6 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.