CodeDev Help

Ouvrir une fenĂȘtre

La SFML repose sur une fenêtre de rendue. Dans le cadre de ce système, vous devez utiliser trois classes :

  • sf::RenderWindow

  • sf::VideoMode

  • sf::Event

RenderWindow

La classe sf::RenderWindow permet de créer une fenêtre de rendue graphique. Deux paramètres sont nécessaires :

  • sf::VideoMode pour indiquer la taille de la fenêtre

  • sf::String pour le titre de la fenêtre

Par exemple :

sf::RenderWindow window(sf::VideoMode(800, 600), "Test");

A ce stade, vous avez une fenêtre, mais cette dernière se ferme tout de suite. En effet, il faut la maintenir ouverte.

VideoMode

La classe sf::VideoMode permet de créer un mode vidéo. Les paramètres sont :

  • Hauteur (unsigned int)

  • Largeur (unsigned int)

  • Nombre de bits par pixels ou bpp (unsigned int)

Par défaut, il est en 32 bpp, mais généralement le 24 bpp ne change rien.

Event

Pour que votre fenêtre puisse rester ouverte, il lui faut deux boucles :

  • Une boucle infinie

  • Une boucle d'évènements

Pour la boucle infinie, c'est simple : avec un while qui teste si la fenêtre est ouverte :

while (window.isOpen()) { }

Tant que votre fenêtre est ouverte, cette boucle va s'exécuter. Vous allez me dire :

Mais comment je fais pour arrêter cette boucle et fermer la fenêtre ?

Pour réaliser ce petit miracle, nous devons justement créer notre seconde boucle. Cette dernière se positionne dans notre boucle infinie, c'est la boucle d'évènements.

En premier lieu, nous devons créer une variable de type sf::Event. Ensuite la boucle est là encore un while, mais sur lequel nous attendons les évènements :

sf::Event event{}; while (window.pollEvent(event)) { }

Ici, nous déclarons notre variable et on demande à la SFML, de récupérer tous les évènements : clavier, souris, joystick, etc.

Attention cependant, le pollEvent n'est pas bloquant, s'il y a un évènement à gérer, il rentre dans la boucle et va le gérer. Vous avez le waitEvent qui lui, va bloquer et attendre la réception d'un évènement.

Maintenant que nous avons notre boucle, nous gérons nos évènements dedans. Pour l'instant nous n'allons en voir qu'un seul : la fermeture de la fenêtre.

if (event.type == sf::Event::Closed) { window.close(); }

Ici, nous testons le type d'évènement, si c'est un évènement de fermeture (clique sur la croix de la fenêtre), alors on lui indique de fermer la fenêtre. A la fin du tour de boucle, le isOpen() renvoi false, la boucle infinie s'arrête là.

03 mai 2025