====== 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//