Section Sciences de la vie
Programmation Orientée Objet
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 :
- du clavier
- de la souris
- ou d'interactions avec l'interface graphique (par exemple appuyer sur le bouton de fermeture de la fenêtre). Rappelons-nous que l'on ne peut toujours pas fermer la fenêtre de notre application en cliquant sur le bouton fermer!
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(); } }