Site Loader

Pour ouvrir une fenêtre en CSFML, vous aurez besoin de 4 fonctions que je vais vous décortiquer petit à petit 🙂 !

La fonction « sfRenderWindow_create » !

Cette fonction a pour rôle de créer la fenêtre. Elle est donc essentielle. Commençons par regarder le prototype de la fonction.

sfRenderWindow* sfRenderWindow_create (sfVideoMode mode, const char *title, sfUint32 style, const sfContextSettings *settings);

La fonction prend 4 paramètres  :

  • un sfVideoMode qui sert à définir la longueur, la largeur ainsi que le nombre de bits par pixel.
  • un const char * qui donnera le titre de notre fenêtre.
  • un sfUint32 qui servira à définir le type de fenêtre qu’on utilisera
  • un sfContextSettings * qui sert à modifier certains paramètres. Si jamais on envoie NULL à la place, la fonction conservera ses valeurs par défaut.

Bien, je vous propose maintenant de regarder un petit exemple 🙂 ! On va d’abord créer une fonction qui va initialiser les valeurs de nos paramètres.

sfRenderWindow *set_win_param(unsigned int width, unsigned int height, unsigned int bits_per_pixel, char *title)
{
        sfRenderWindow *window = NULL;
        sfVideoMode mode;

        mode.width = width;
        mode.height = height;
        window = sfRenderWindow_create(mode, title, sfDefaultStyle, NULL); //sfDefaultStyle permettra ici à la fenêtre d'être... fenêtré :p) Vous pouvez retrouver les autres valeurs dans la documentation
        return (window);
}

Vous pourriez me dire « mais tu ne fais pas de gestion d’erreur ! » . Je vous repondrai ainsi : il m’est impossible de faire une bonne gestion d’erreur sans rendre le code 3 fois plus long et 3 fois moins clair. Maintenant, je vous laisse créer un main et appeller la fonction 🙂 !

ça ne marche pas ? c’est normal ! Passons à la deuxième fonction !

La fonction « sfRenderWindow_isOpen » , »sfRenderWindow_clear » et « sfRenderWindow_display » !

sfRenderWindow_isOpen. Cette fonction est très simple. Comme son nom l’indique, elle sert à savoir si la fenêtre est ouverte ou non :). Allons regarder comment est prototypée la fontion.

sfBool sfRenderWindow_isOpen (const sfRenderWindow *window);

Ici, la fonction reçoit une variable de type sfRenderWindow, qu’on aura au préalable initialisée avec la fonction sfRenderWindow_create et retourne un sfBool. Vous l’aurez compris, il s’agit d’une booléenne, une variable qui ne peut prendre que 2 valeurs :

  • 0, dans un cas dit faux.
  • 1, dans un cas dit vrai.

« Mais, pourquoi tu nous montres comment vérifier si la fenêtre est ouverte alors qu’on n’a toujours pas réussit à l’ouvrir ? « 

Et bien sachez que vous avez déjà ouvert votre fenêtre ;). Le problème, c’est maintenant de la maintenir ouverte ! En effet, votre programme se termine si vite que la fenêtre est automatiquement fermée :/ C’est pour cela que nous avons besoin de la fonction sfRenderWindow_isOpen.

Démonstration :

int main(void)
{
        sfRenderWindow *window = set_win_param(1920, 1080, 32, "fenetre");

        while (sfRenderWindow_isOpen(window) {
                 printf("Eh, je suis ouverte.\n");
        }
        return (0);
}

Maintenant, vous disposez d’une magnifique fenêtre prête à l’utilisation !!! Néanmoins, si vous lancez le programme maintenant, il y a de fortes chances pour que votre fenêtre crash :/ C’est là qu’interviennent les deux fonctions restante !

// Cette fonction permet d'actualiser votre fenêtre après modification de son contenu !
void sfRenderWindow_display(sfRenderWindow *window); 
void sfRenderWindow_clear(sfRenderWindow *window, sfColor color);
// Cette fonction sert à remplir la fenêtre d'une couleur. On l'utilise avec sfRenderWindow_display pour éviter d'afficher des images les unes sur les autres !!!

Maintenant que nous avons vu à quoi ressemble ces fonctions, passons à la démonstration !

int main(void)
{
        sfRenderWindow *window = set_win_param(1920, 1080, 32, "fenetre");

        while (sfRenderWindow_isOpen(window) {
                 sfRenderWindow_clear(window, sfBlack);
                 sfRenderWindow_display(window);
                 printf("Eh, je suis ouverte.\n");
        }
        return (0);
}

Remerciement

Merci à vous tous d’avoir suivi ce tuto, n’hésitez pas à le partager s’il vous a plus ! Si vous avez des questions ou besoin de précision, contactez moi par mail !

Post Author: Samy Boulenoir

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *