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

Auteur Sujet: [SFML 2.0] Events mis à jours alors que la fenetre n'a pas le focus  (Lu 2532 fois)

0 Membres et 1 Invité sur ce sujet

Metalcolic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
    • E-mail
Bonsoir,

J'ai un petit soucis avec mon jeu, lorsque la fenêtre sfml n'as pas le focus ( le jeu est lancé en arrière plan et je suis sur une page internet), mes events se mettent quand même à jours (events clavier).

Mon programme contient un "EventManager", tout ce qu'il y a de plus simple : a chaque boucle, on met à jours tous les events clavier.

main.cpp

 while(game->isRunning())
    {
        game->eventMgr->updateKeyboard();
        game->eventMgr->updateMouse();
       
        sf::Event event;
        while(game->pollEvent(event))
        {

            if(event.type == sf::Event::Closed)
                                        game->kill();

            if (game->eventMgr->key.escape)
                    game->kill();

        }
        float elapsed = montre.getElapsedTime().asMilliseconds();
        montre.restart();

        world.update(elapsed);

        game->clear(sf::Color(30,30,30));
        world.draw();
        game->display();

    }

et dans l'eventManager:

void
    EventManager::updateKeyboard()
    {
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            key.left = true;
        else
            key.left = false;

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            key.right = true;
        else
            key.right =false;

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            key.up = true;
        else
            key.up = false;

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            key.down = true;
        else
            key.down = false;

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Z))
            key.z = true;
        else
            key.z = false;

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
            key.q = true;
        else
            key.q = false;
       
       //etc...

}

S'il y a besoin de plus d'informations, n'hésitez pas à me demander.
Merci pour votre aide!

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Events mis à jours alors que la fenetre n'a pas le focus
« Réponse #1 le: Novembre 11, 2012, 09:06:23 pm »
sf::Keyboard::isKeyPressed n'a rien à voir avec les évènements.

Ensuite si tu avais lu le tutoriel, tout simplement, tu aurais vu qu'il n'y a là rien d'anormal.

Citer
Cette fonction lit directement l'état du clavier, sans chercher à savoir si votre fenêtre a le focus ou non. Cela signifie que isKeyPressed peut renvoyer true même si votre fenêtre est inactive.
Laurent Gomila - SFML developer

Metalcolic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
    • E-mail
Re : [SFML 2.0] Events mis à jours alors que la fenetre n'a pas le focus
« Réponse #2 le: Novembre 11, 2012, 09:14:12 pm »
Merdouille !
Je dois donc passer par la fonction pollEvent() si j'ai bien compris.
Merci et désolé pour le dérangement laurent ^^'
« Modifié: Novembre 11, 2012, 09:19:10 pm par Metalcolic »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Events mis à jours alors que la fenetre n'a pas le focus
« Réponse #3 le: Novembre 11, 2012, 10:27:06 pm »
Tu peux aussi savoir si la fenêtre a le focus en écoutant les évènements GainedFocus et LostFocus.
Laurent Gomila - SFML developer