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

Auteur Sujet: Key repetition  (Lu 1964 fois)

0 Membres et 1 Invité sur ce sujet

yhu420

  • Jr. Member
  • **
  • Messages: 75
    • Voir le profil
    • E-mail
Key repetition
« le: Novembre 01, 2013, 09:31:34 am »
Bonjour tout le monde,
Aujoud'hui je vais revenir sur les entiers battus avec un problème de "key repetition". J'aimerai qu'un seul évènement soit déclenché lorsqu'une touche est appuyée (et pas maintenue). Vous allez tout de suite me dire renderwindow::setKeyRepeatEnabled(false), oui, mais ça ne marche pas chez moi, allez savoir pourquoi.
Logiquement, il aurait fallu faire un truc du genre:
#include <SFML/Graphics.hpp>

int main(int argc,const char * argv[])
{
        srand((unsigned)time(NULL));
    sf::RenderWindow window(sf::VideoMode(1000, 600), "test");
        window.setKeyRepeatEnabled(false);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
                //Main code
afunction(event);

        window.display();
    }

    return 0;
}

Mais là aucun effet la key repetition est encore présente..

Alors j'ai aussi essayé
afunction(sf::event event)
{
if(event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Return)
 std::cout << "blop";
}

Mais la le "blop" n'apparait a aucun moment :( .

Quelqu'un aurait-il une solution?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Key repetition
« Réponse #1 le: Novembre 01, 2013, 02:53:45 pm »
Traite l'évènement là où il est valide, c'est-à-dire dans la boucle d'évènements.
Laurent Gomila - SFML developer

yhu420

  • Jr. Member
  • **
  • Messages: 75
    • Voir le profil
    • E-mail
Re : Key repetition
« Réponse #2 le: Novembre 01, 2013, 03:36:26 pm »
Ok merci beaucoup ça marche dans la boucle, mais il y a quelque chose que je n'ai pas bien saisi: Pourquoi ne peut-on pas se servir de l’événement en dehors de la boucle?  :o

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Key repetition
« Réponse #3 le: Novembre 01, 2013, 04:30:01 pm »
Les instances de sf::Event sont remplies par la fonction pollEvent (ou waitEvent) de la classe sf::Window. Il n'y a que ces fonctions qui peuvent produire des évènements valides, toute tentative d'utiliser un sf::Event sans qu'il provienne d'un appel valide à pollEvent (ou waitEvent) produira le même genre de comportement indéterminé qu'expliqué plus haut.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Key repetition
« Réponse #4 le: Novembre 01, 2013, 04:46:19 pm »
Ce que beaucoup de gens ne comprennent pas, et je ne comprends pas moi-même pourquoi ils ne comprennent pas, c'est qu'appeler pollEvent signifie "donne moi un évènement", et que lorsqu'elle te renvoie false, ça signifie "y avait pas d'évènement, je t'ai rien donné". Alors tu comprends bien pourquoi ça n'a aucun sens de se servir de l'évènement après que pollEvent t'ait renvoyé false. C'est comme si tu avais écrit ça :

sf::Event event;
afunction(event);
Laurent Gomila - SFML developer