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

Auteur Sujet: TextEntered trop rapide...  (Lu 2945 fois)

0 Membres et 1 Invité sur ce sujet

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
TextEntered trop rapide...
« le: Août 13, 2013, 10:24:55 pm »
Bonjour à tous !

Je travaille sur des zones de saisies de textes mais l'entrée est trop rapide...

Pourtant j'utilise bien la gestion de TextEntered et pas KeyPressed... Ensuite j'ai essayé d'activer setKeyRepeatEnabled(false) mais rien ne change...

Mon code :

void Input::onEvent(sf::Event event,sf::RenderWindow* window)
{
    if(isHover(window) && event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
    {
        select(this);
    }//Select permet de définir quel est le champ séléctionné

    if((InputSelected == this && event.type == sf::Event::TextEntered && event.text.unicode > 64 && event.text.unicode < 91)  /* 64 < a < 91 = MAJ */
    || (InputSelected == this && event.type == sf::Event::TextEntered && event.text.unicode > 96 && event.text.unicode < 123) /* 96 < a < 123= MIN */
    || (InputSelected == this && event.type == sf::Event::TextEntered && event.text.unicode > 47 && event.text.unicode < 58)) /* 47 < a < 58 = NUM */
    {
        addChar(event.text.unicode);
    } // Donc ici on ajoute un caractère à ma string dans la zone de saisie
 

    if(InputSelected == this && event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::BackSpace)
    {
        removeChar();
    } //et ici on enlève le dernier
}

Quelqu'un a-t-il une solution ? Merci d'avance :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TextEntered trop rapide...
« Réponse #1 le: Août 13, 2013, 10:43:01 pm »
C'est quoi "trop rapide" ? On peut voir ta boucle d'évènements ?
Laurent Gomila - SFML developer

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : TextEntered trop rapide...
« Réponse #2 le: Août 13, 2013, 10:49:20 pm »
Trop rapide du genre 6 caractères en une seconde...

while(app.isOpen()) //inclut les fonctions display, clear et draw (ce dont on avait débattu sur un autre sujet xD)
    {
        while(app.pollEvent()) //inclut ma fonction onEvent
        {
            if(CmEvent::clicLeft(app.getEvent()) && boutonT.isHover(app.getWindowPtr()))
            {
                boutonT.centerText("Bim! Centré!");
            }
            if(CmEvent::clicLeft(app.getEvent()) && boutonI.isHover(app.getWindowPtr()))
            {
                boutonI.centerImage();
            }
            if(CmEvent::enterPressed(app.getEvent()) && Input::getActiveInputPtr() != NULL)
            {
                boutonT.centerText(Input::Input::getActiveInputPtr()->returnString());
            }
        }
    }

bool Application::pollEvent()
{
    bool retour = mWindow.pollEvent(mEvent);
    if(mEvent.type == sf::Event::Closed)
        close();
    else
        mGuiMgr.onEvent(mEvent,&mWindow);
    return retour;
}

Est-ce que ça peut avoir un rapport avec le fait que j'utilise un FrameRateLimit un peu trop élevé ?
Eh bien nan... Je viens de tester....
« Modifié: Août 13, 2013, 10:52:07 pm par Cmdu76 »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : TextEntered trop rapide...
« Réponse #3 le: Août 13, 2013, 11:36:43 pm »
C'est pas énorme 6 caractères par seconde. C'est pareil quand tu tapes un message sur le forum par exemple ?

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : TextEntered trop rapide...
« Réponse #4 le: Août 13, 2013, 11:39:25 pm »
Enfin pardon 6 caractères en ... juste le temps d'une pression :)
Du coup j'ai ralenti avec un sleep mais bon c'est pas terrible... enfin bref pour le moment je vais me contenter de ça

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TextEntered trop rapide...
« Réponse #5 le: Août 14, 2013, 07:46:02 am »
Ca marchera mieux comme ça :

bool Application::pollEvent()
{
    if (mWindow.pollEvent(mEvent))
    {
        if(mEvent.type == sf::Event::Closed)
            close();
        else
            mGuiMgr.onEvent(mEvent,&mWindow);
        return true;
    }
    else
        return false;
}

PS : garder un sf::Event comme membre d'une classe ça ne sert strictement à rien. L'évènement n'est utilisé que localement, donc déclare le localement.
Laurent Gomila - SFML developer