Forum de la communauté SFML

Aide => Général => Discussion démarrée par: CatEndal le Août 15, 2017, 08:53:53 pm

Titre: détécter quand une touche est ralachée
Posté par: CatEndal le Août 15, 2017, 08:53:53 pm
Bonjour
Je suis en train de créer un jeu avec la SFMl je veut que le joueur rentre un code a un moment. seulement, voilà, quand j'utilise la fonction :
 
while (fill)
{
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
        {
                //mon code     
        }
}

le programme considère que la touchea est appyée plein de fois ( ce qui est logique car le logiciel test a chaque tics). donc comment faire en sorte que le programme attende que la touche soit relâchée ? Merci
Titre: Re: détécter quand une touche est ralachée
Posté par: Laurent le Août 15, 2017, 09:49:48 pm
https://www.sfml-dev.org/tutorials/2.4/window-events-fr.php#les-cevcinements-keypressed-et-keyreleased
Titre: Re: détécter quand une touche est ralachée
Posté par: CatEndal le Août 16, 2017, 05:43:12 pm
j'ai suivi ce tutoriel, mais lorsque je rajoute
 
while (fill)
{
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
        {
                //mon code
                while (sf::Event::KeyPressed)
        {
                               
                        }      
        }
}
,
Titre: Re: détécter quand une touche est ralachée
Posté par: CatEndal le Août 16, 2017, 05:45:27 pm
désolé du double post
donc quand je rajoute ce code, le programme se bloque avant même que je fasse quelque chose
Titre: Re: détécter quand une touche est ralachée
Posté par: Laurent le Août 16, 2017, 05:55:35 pm
Citer
j'ai suivi ce tutoriel
Pas sûr... Ton "code" n'a vraiment aucun sens, et ne correspond en rien à ce qui est décrit dans le tutoriel, ni dans aucune autre source (documentation, wiki, exemples, livres, ...).

Citer
désolé du double post
Tu as la possibiltié d'éditer un post plutôt que de reposter.
Titre: Re: détécter quand une touche est ralachée
Posté par: Guillaume__ le Août 17, 2017, 10:46:51 am
Salut !

Pour détecter lorsqu'une touche est relâchée il faut se placer au niveau de la boucle événementielle et utiliser l'event KeyReleased. Plus concrètement ça devrait te donner quelque chose de similaire à ceci :

//...
sf::Event event;
while(window.isOpen()){
    while(window.pollEvent(event)){
        //Si la touche A de ton clavier est relâchée alors on rentre dans la condition
        if(event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::A)
            std::cout << "Detection du relachement de la touche A avec la SFML !" << std::endl;
    }
}
//...
 

Y a pas plus simple :)
Essayes de regarder en profondeur le lien que Laurent t'a fourni, tu y trouveras tout ce dont tu as besoin concernant les événements ;)

Cordialement G