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

Auteur Sujet: Délai avant répétition événement isKeyPressed  (Lu 2417 fois)

0 Membres et 1 Invité sur ce sujet

Kao

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Délai avant répétition événement isKeyPressed
« le: Mars 05, 2016, 01:18:25 pm »
Bonjour à tous,
Je suis en train de réaliser un projet avec sfml (logique vu que je viens demander de l'aide ici :D), mais je suis face à un problème.
Je suis parvenu à réaliser le déplacement (basique pour le moment) d'une image avec les touches du clavier. Pour faciliter les déplacements il est évident que j'ai besoin que l'événement se répète si la touche est maintenue, cependant mon problème vient du léger délai avant que l'événement ne se répète.
Je m'explique, quand je reste appuyé sur la flèche gauche par exemple, le personnage avance de la distance codée, s'arrête puis enfin fait son mouvement continu. Y aurait-il un moyen de supprimer cette latence ?
Merci d'avance de votre aide !

victorlevasseur

  • Full Member
  • ***
  • Messages: 206
    • Voir le profil
Re : Délai avant répétition événement isKeyPressed
« Réponse #1 le: Mars 05, 2016, 02:03:16 pm »
Dans ce cas, il ne faut pas utiliser les événements mais ceci : http://www.sfml-dev.org/tutorials/2.3/window-inputs-fr.php

Kao

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Re : Délai avant répétition événement isKeyPressed
« Réponse #2 le: Mars 05, 2016, 03:45:26 pm »
Bonjour et merci de votre réponse,
 je viens donc de tester le keypressed totalement en dehors de la boucle d'événement (car je pensais qu'il fallait s'en servir dans la boucle d'événement tout de même)
while (this->window->isOpen())
        {
                sf::Event event;
               
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && !sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                {
                        mario.move(-1, 0);
                        mario.setTexture(marioLeft);

                }

                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && !sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                {
                        mario.move(1, 0);
                }
               
                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                {
                        mario.move(0, -1);
                }

                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                {
                        mario.move(0, 1);
                        mario.setTexture(marioFace);
                }

                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                        mario.move(-1, -1);
                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                        mario.move(-1, 1);
                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                        mario.move(1, -1);
                else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                        mario.move(1, 1);


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

                       
                }

cependant j'ai maintenant un autre problème. Lorsque j'étais dans la boucle d’événement, le personnage se déplaçait correctement, c'est à dire bel et bien à une vitesse de pixel par pixel, mais maintenant, l'animation est certes fluide et sans le temps d'arrêt au départ, mais ça se déplace beaucoup trop vite :/
Et si je diminue la vitesse en 0.5 dans le move par exemple, il y a des transformations de pixels sur l'image.
Y aurait-il aussi un moyen de régler cette vitesse sans abîmer l'image et garder la fluidité de mouvement ?
Merci d'avance :D