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 :
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 :
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 :
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.
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à.