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

Auteur Sujet: [Résolu][Evénements] La fenêtre ne répond pas [SFML 2.3.2]  (Lu 2085 fois)

0 Membres et 1 Invité sur ce sujet

stdgregwar

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Bonjour tout le monde,

J'ai un programme en SFML que je compile à la fois sous Windows (10) et Linux (Arch,Debian et Ubuntu)

Qui possède une boucle événementielle comme ceci :

    mWindow.setActive();
    mGameStates.pushState(SharedState(new EngineState()));

    while(mWindow.isOpen())
    {
       sf::Event event;
       while(mWindow.pollEvent(event))
       {
           mGameStates.pushEvent(event);

           if(event.type == sf::Event::Resized) //Window resized
           {
               mGraphicsManager.resize(mWindow.getSize());
           }
           if(event.type == sf::Event::Closed)
               close();
       }

       mWindow.clear();

       updateAndRender();

       mWindow.display();
    }
    return 0;
 

Malgré le fait de pomper les events, comme expliqué dans de nombreux posts. Et la version de SFML à jour. Mes 4 OS se plaignent d'un soft qui ne répond pas au bout de 10s environ de fonctionnement totalement normal du programme.

EDIT :

En écrivant le post j'ai eu une illumination : mon pushState() engendre une bonne 1/4s de parsing xml et autre loading ce qui retarde le traitement des événements. En rajoutant une pompe pour du beurre en haut l'OS ne se plaint plus.

mWindow.setActive();
    //Pump first events to avoid OS not responding
    for(sf::Event e; mWindow.pollEvent(e);){}

    mGameStates.pushState(SharedState(new EngineState()));

    while(mWindow.isOpen())
    {
       sf::Event event;
       ...
 

Peut-être serait-il utile de rajouter un paragraphe en rouge là dessus dans les tutoriels sur les events? Ou alors dans la doc de pollEvent?

Ou peut-être que Window::create devrait répondre une première fois à l'OS pour éviter ce genre de cas?

Merci en tout cas à toute l'équipe de développement de SFML qui fait vivre cette alternative OOP à SDL.

Greg

 

anything