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

Auteur Sujet: hasFocus() - Crash  (Lu 2827 fois)

0 Membres et 2 Invités sur ce sujet

LD_FLO

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
hasFocus() - Crash
« le: Avril 20, 2015, 12:24:24 am »
Bonsoir, lorsque je change de fenêtre Windows (mozilla, bloc note, etc..), je mets mon application SFML en attente à l'aide de sf::Window::hasFocus.
Lorsque je reviens dessus, il arrive de manière totalement aléatoire que la fenêtre plante ("... ne répond pas"), alors que le programme en lui-même continue de tourner (l'affichage console marche).

Une idée à mon problème ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : hasFocus() - Crash
« Réponse #1 le: Avril 20, 2015, 07:43:05 am »
Citer
je mets mon application SFML en attente à l'aide de sf::Window::hasFocus.
Gné ?

Citer
Une idée à mon problème ?
Sans aucun détail (surtout ton code), on ne peut pas faire grand chose.
Laurent Gomila - SFML developer

LD_FLO

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : hasFocus() - Crash
« Réponse #2 le: Avril 20, 2015, 11:11:42 am »
Corps principal du programme:

while (true)
{
        if (app->fenetre->hasFocus())
        {
                if (app->input->gerer()) //Gestion des inputs (renvoie true si fermeture du programme)
                {
                        app->fenetre->close();
                        break;
                }
                app->gerer(); //Gestion du programme
                app->afficher(); //Affichage
        }
}
 

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : hasFocus() - Crash
« Réponse #3 le: Avril 20, 2015, 11:24:49 am »
Il faut que tu continues à faire tourner la boucle d'évènements même quand ta fenêtre n'a plus le focus, pour qu'elle continue à être réactive.
Laurent Gomila - SFML developer

LD_FLO

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : hasFocus() - Crash
« Réponse #4 le: Avril 20, 2015, 11:52:52 am »
Super, ça à l'air de fonctionner. Merci  :)
Tant qu'on y est, il arrive aussi parfois que l'évènement
 
if (event.type == sf::Event::Closed)

soit vrai lorsque je lance mon programme (lors de la 1ère frame disponible, résultant la fermeture du programme).

Mon code:

bool CInput::gerer()
{
        app->fenetre->pollEvent(event);

        if (event.type == sf::Event::Closed) {return true;}

        ...
}

Pour palier à ce problème, j'utilise un booléen statique:

bool CInput::gerer()
{
        app->fenetre->pollEvent(event);

        static bool quit = false;
        if (event.type == sf::Event::Closed) {return quit;}
        quit = true;

        ...
}

Ça marche, mais je trouve ça un peu dégueulasse, une idée encore une fois ?
« Modifié: Avril 20, 2015, 11:57:58 am par LD_FLO »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : hasFocus() - Crash
« Réponse #5 le: Avril 20, 2015, 11:57:08 am »
Relis la doc, les tutoriels, les exemples, ... surtout le tutoriel.
« Modifié: Avril 20, 2015, 11:58:39 am par Laurent »
Laurent Gomila - SFML developer

LD_FLO

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : hasFocus() - Crash
« Réponse #6 le: Avril 20, 2015, 01:09:23 pm »
Trouvé !

if (app->fenetre->pollEvent(event))
{
    if (event.type == sf::Event::Closed)
         return true;
}
 

Je gère les évènements clavier avec sf::Keyboard (bien plus souple).