====== Premier programme avec la bibliothèque SDL ====== Vous souhaitez utiliser la fameuse bibliothèque [[:sdl]] et elle ne vous paraît pas très claire d'utilisation ?\\ Parfait ^_^ cette page est la pour vous permettre **de vous adapter** à la SDL. Cette page n'est pas là pour réaliser un wiki de la SDL (d'ailleurs [[https://wiki.libsdl.org/FrontPage|le wiki est officiel]] est disponible **en anglais**) Quelques lien intéressant : * **(en)**[[https://wiki.libsdl.org/wiki/index| L'index de toutes les pages de la documentation]] * **(en)**[[http://www.sdltutorials.com/tutorials|Quelques tutoriels des différentes bibliothèques]] * **(en)**[[https://wiki.libsdl.org/APIByCategory|Les fonctions rangées par Catégorie]] * **(en)**[[https://wiki.libsdl.org/SDL_Keycode|Les représentations des touches lorsqu'elle sont pressées]] Si vous souhaitez utiliser SDL3, [[https://gist.github.com/Amiralgaby/ecba154a09141d82f99622ef4704dea4|un exemple est disponible sur Github]]. Plus besoin de s'occuper de la boucle de notre programme ! Uniquement par déclencheurs ===== Inclure la bibliothèque dans vos projets pour l'utiliser ? ===== Partons du principe que vous l'avez installée via un gestionnaire de paquet, c'est toujours plus simple sous GNU/Linux 8-) Il faut simplement mettre un macro signifiant que vous l'incluez dans le fichier .c: #include vous pouvez aussi utiliser #include "SDL.h" ===== Notre premier programme ==== ==== Et maintenons codons en C ! ==== C'était tout ? oui ! pour le moment :-| ça va se corser, c'est ça qui motive disons... Allez un petit code : #include int main(int argc, char *argv[]) { SDL_bool done; SDL_Window *window; SDL_Event event; // On declare la structure d'event SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL2 window = SDL_CreateWindow( // Créer la fenêtre "SDL première fenêtre pour comprendre", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL ); // Check si la fenêtre à pu être crée if (window == NULL) { SDL_Log("La fenêtre n'a pas pu être créer %s", SDL_GetError()); SDL_Quit(); return 1; } done = SDL_FALSE; while (!done) { // Boucle du programme while (!done && SDL_PollEvent(&event)) { switch (event.type) { case (SDL_QUIT): { // Dans le cas de fermeture de fenêtre done = SDL_TRUE; break; } case (SDL_KEYDOWN): { SDL_Log("L'utilisateur vient juste de presser la touche %s", SDL_GetKeyName(event.key.keysym.sym)); } } } SDL_Delay(1); // Repose votre OS durant quelques millisecondes (je déconseille de mettre > 10 car inutile) } SDL_DestroyWindow(window); // On ferme la fenêtre visuellement et on la détruit en mémoire SDL_Quit(); // Nettoyage des allocations mémoire return 0; } Avec ce code vous devriez comprendre comment faire une fenêtre et comment se passe les événements. Pour être plus clair je vais vous expliquer le concept : Chaque fois que vous passer dans SDL_PollEvent vous prenez l'event un tête de file des événements et vous allez réalisé des algorithme selon son type, sa valeur. **(en)**[[https://wiki.libsdl.org/SDL_Event|la liste des events sur le wiki officiel]] Un Event peut avoir comme type : * __key__ pour les touches de clavier * __motion__ pour les mouvements de souris * __button__ pour les click de souris * (plein d'autre voir la doc au-dessus) Si l'Event est de type __key__ alors vous pouvez avoir : * sont type : appuyé SDL_KEYDOWN ou relâché SDL_KEYUP * sont keysym : c'est à dire sa valeur Si l'Event est de type __mouse__ alors vous pouvez avoir : * FIXME Si l'Event est de type __button__ alors vours pouvez avoir : * FIXME Il y a beaucoup d'autre type d'Event voir la doc au-dessus ==== Compilez ! ==== Nous utilisons SDL2 donc il faut faire : gcc -o prog -Wall main.c `sdl2-config --cflags --libs` ==== Executez ! ==== Et voilà ! votre exécutable prêt à être exécuté via ./prog ===== Notre second programme ==== Ici on va écrire dans la fenêtre :-) ==== Inclure une librairie annexe ==== Ça va être un peu spécial puisque nous aurons besoin de **[[apt>libsdl2-ttf-dev|sdl2-ttf]]**. On doit bien évidemment inclure ''SDL_tff.h'' pour utiliser les fonctions de cette librairie. #include "SDL_ttf.h" ==== Codons en C ! === ici un lien vers un repo où il y a le code ==== Compilez ! ==== Nous utilisons SDL2 **et** SDL2_tff donc il faut faire : gcc -o window window.c -Wall `sdl2-config --cflags --libs` -lSDL2_ttf ==== Exécutons ! ==== ./window ---- //[[:utilisateurs:Amiralgaby|Amiralgaby]] Le 06/08/2022, 10:48//