Ecole Polytechnique Fédérale de Lausanne
Section Sciences de la vie
Programmation Orientée Objet
Tutoriel librairie graphique (SFML)

III. Gestion des événements: déplacement des paddles

Jusque là, nous savons ouvrir une fenêtre et y dessiner toutes sortes de choses. Toutefois, il manque un aspect important à nos possibilités: l'interaction avec l'utilisateur.

Cette interaction peut se faire par exemple par le biais :

C'est là qu'intervient la gestion des événements. Reprenons notre squelette d'application SFML et intéressons-nous à la boucle la plus interne :

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "Titre");

    while (window.isOpen())
    {
        //Traitement des événements
		sf::Event event;
        while (window.pollEvent(event))
        {
	      //...
		}
		//Fin du traitement des événements
        //...
        window.clear();
        window.display();
    }

    return EXIT_SUCCESS;
}

La boucle while la plus interne va en fait parcourir tous les événements (représentés par la classe sf::Event qui ont été déclenchés depuis le dernier passage dans la boucle de rendu. Ce peut-être une indication de mouvement de souris, d'appui sur une touche ou sur un élément d'interface graphique. A nous ensuite de traiter chaque événement selon son type et ce que nous souhaitons en faire.

Fermeture de fenêtre

La détection et le traitement d'un événement "fermeture de fenêtre" se fait ainsi:

 while (window.pollEvent(event))
{
	if (event.type == sf::Event::Closed)
	{
		//Traitement de l'événement, par exemple fermeture de la fenêtre:
		window.close();
	}    
}