Forum de la communauté SFML

Aide => Fenêtrage => Discussion démarrée par: lo7601 le Janvier 05, 2019, 12:59:36 am

Titre: Création de deux fenêtres problème d'évènements.
Posté par: lo7601 le Janvier 05, 2019, 12:59:36 am
Salut voici un code simple qui reproduit le bug :
#include <SFML/Graphics.hpp>
#include <iostream>
#include <memory>
using namespace sf;
int main() {
    RenderWindow w1 (sf::VideoMode(800, 600), "test1");
    RenderWindow w2 (sf::VideoMode(800, 600), "test2");
    while (w1.isOpen()) {
        sf::Event event;
        while(w2.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                w1.close();
                w2.close();
            }
            if (event.type == sf::Event::KeyReleased)
                std::cout<<"key released"<<std::endl;
            if (event.type == sf::Event::KeyPressed)
                std::cout<<"key pressed"<<std::endl;
        }
    }
}
 

Lors de l'appui sur une touche il m'affiche plusieurs fois key released et keypressed ce qui n'est pas normal.
Je savais que SFML était bugué surtout lors de la création de plusieurs fenêtres.
Titre: Re: Création de deux fenêtres problème d'évènements.
Posté par: kimci86 le Janvier 05, 2019, 01:22:00 pm
Tout d'abord, il manque une boucle d'évènement pour la fenêtre w1.

Citation de: tutoriel "Ouvrir et gérer une fenêtre SFML"
Une erreur que les gens font souvent est d'oublier de mettre une boucle d'évènements, car ils n'en ont pas besoin (ils utilisent les entrées temps réel à la place, typiquement). Mais sans gestion d'évènement la fenêtre ne sera pas réactive ; en effet, la boucle d'évènement a deux rôles : en plus de fournir les évènements à l'utilisateur, elle permet à la fenêtre de traiter ses évènements internes, ce qui est impératif a son bon fonctionnement.

Quelle plateforme utilises-tu ? Je n'arrive pas à reproduire le problème sur Ubuntu.
Titre: Re: Création de deux fenêtres problème d'évènements.
Posté par: lo7601 le Janvier 05, 2019, 02:26:18 pm
Ha bah ok comme ça sa marche mieux comme ça, ok donc le bug dans mon projet c'est sûrenement le fait qu'il ne rentre pas dans la boucle d'évènement de plus ma seconde fenêtre je la mets invisible ...