Introduction à la SDL
La bibliothèque SDL (Simple DirectMedia Layer) est une bibliothèque graphique en C qui
permet de créer des jeux vidéo en utilisant des fonctions de bas niveau pour dessiner des
images et gérer des entrées claviers et souris. Elle est multiplateforme et permet de développer
des jeux sur différents systèmes d'exploitation, tels que Linux, Windows et MacOS.
Pour commencer, nous allons explorer la bibliothèque SDL en testant quelques petits bouts de
code qui n'utilisent que la SDL. Nous allons commencer par inclure la bibliothèque SDL en
ajoutant la ligne suivante en haut de notre fichier source :
La première étape pour utiliser la SDL consiste à initialiser la bibliothèque en appelant la
fonction SDL_Init(). Cette fonction prend un argument qui indique les sous-systèmes à
initialiser. Par exemple, pour initialiser le sous-système vidéo, nous pouvons utiliser :
/*pour les autres sous systemes*/
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER); // avec tous les
arguments , on initialise les diffèrent modules un a un.
SDL_Init(SDL_INIT_EVERYTHING); //initialize tous les sous systemes meme ceux
quon utilize pas
Ensuite, nous allons créer une fenêtre. Pour créer une fenetre on a dabord besoin dune
variable de type SDL_Surface * qui va contenir notre ecran. Ensuite on va appeler la fonction
SDL_SetVideoMode qui prend en parametre les dimesions de notre ecran plus quelques autre
parametres.
SDL_Surface *ecran=NULL;
int largeur_fenetre=600,hauteur_fenetre=600;
ecran=SDL_SetVideoMode(largeur_fenetre,hauteur_fenetre,32,SDL_HWSURFACE
|SDL_DOUBLEBUF);
NB : Lorsque nous avon termine l’exution de notre programme il faut liberer les resource.
Pour ca on peut utiliser la fonction SDL_Quit().
SDL_Image
Maintenant que nous avons vu les bases de la bibliothèque SDL, nous allons explorer la
bibliothèque complémentaire SDL_Image. Cette bibliothèque permet de charger des images
dans notre programme à l'aide de la fonction IMG_Load(). Pour utiliser la bibliothèque
SDL_Image, nous devons inclure la ligne suivante en haut de notre fichier source :
Ensuite, nous pouvons charger une image en appelant la fonction IMG_Load(). Cette
fonction renvoie une surface SDL ( une variable de type SDL_Surface * ) qui contient
l'image chargée. Par exemple, pour charger l'image "[Link]", nous pouvons utiliser :
Ensuite, nous pouvons afficher cette image sur notre ecran en utilisant la fonction
SDL_BlitSurface().
SDL_BlitSurface() est une fonction qui nous permet de coller une surface SDL sur une autre
elle fonctionne comme ceci :
SDL_BlitSurface(image, position_image, ecran, psition_ecran);
Image = la surface a coller
Ecran = la surface sur laquelle on veut coller
Les positions sont déterminé par de variable de type SDL_Rect. Le type SDL_Rect est un
type de données qui représente un rectangle dans l'espace 2D. Il est souvent utilisé dans les
programmes SDL pour définir la position et la taille d'une surface ou d'une texture à l'écran.
La structure SDL_Rect est définie comme suit :
où x et y sont les coordonnées du coin supérieur gauche du rectangle, et w et h sont sa largeur
et sa hauteur, respectivement.
Pour revenir a ce bout de code :
SDL_BlitSurface(image, position_image, ecran, psition_ecran);
posittion_image et position_ecran sont donc des variable de type SDL_Rect.
Il est important de noter que toutes les surfaces créées à l'aide de la SDL_Image doivent être
détruites à la fin du programme à l'aide de la fonction SDL_FreeSurface().
La fonction prend en parametre la surface a detruire. Ex :
SDL_FreeSurface(mon_image)
//OU
SDL_FreeSurface(ecran);
//Limage et l'ecran sont tous les 2 des surfaces
SDL_ttf
Maintenant que nous avons vu comment afficher des images, nous allons explorer la
bibliothèque complémentaire SDL_ttf. Cette bibliothèque permet de charger des polices de
caractères dans notre programme à l'aide de la fonction TTF_OpenFont(). Pour utiliser la
bibliothèque SDL_ttf, nous devons inclure la ligne suivante en haut de notre fichier source :
Ensuite, nous pouvons charger une police de caractères en appelant la fonction
TTF_OpenFont(). Cette fonction renvoie une police de caractères qui peut être utilisée pour
dessiner du texte. Par exemple, pour charger la police "[Link]" avec une taille de 28, nous
pouvons utiliser :
NB : ‘[Link]’ c’est le chemin relatif de votre fichier police et nom le nom.
Ensuite, nous pouvons dessiner du texte en utilisant la fonction TTF_RenderText_Solid().
Cette fonction prend en argument une chaîne de caractères, une couleur et une police de
caractères, et renvoie une surface SDL qui contient le texte dessiné. Par exemple, pour
dessiner le texte "Bonjour" en blanc, nous pouvons utiliser :
Ensuite, nous pouvons afficher cette surface de texte en utilisant la fonction
SDL_BlitSurface().
Par exemple, pour afficher le texte dans la fenêtre, nous pouvons utiliser :
SDL_BlitSurface(textSurface, NULL, ecran, position);
Il est important de noter que toutes les polices de caractères créées à l'aide de la SDL_ttf et
toutes les surfaces de texte créées doivent être détruites à la fin du programme à l'aide des
fonctions TTF_CloseFont() et TTF_Quit(). TTF_CloseFont pour fermer les polices
individuellement et TTF_Quit() pour fermer TTF. Ex :
TTF_Font* police = TTF_OpenFont("chemin/vers/[Link]", 28);
// Utilisation de la police...
TTF_CloseFont(police);
TTF_Quit();
SDL_mixer
Maintenant que nous avons vu comment afficher des images et du texte, nous allons explorer
la bibliothèque complémentaire SDL_mixer. Cette bibliothèque permet de jouer des fichiers
audio dans notre programme à l'aide de la fonction Mix_PlayChannel(). Pour utiliser la
bibliothèque SDL_mixer, nous devons inclure la ligne suivante en haut de notre fichier
source :
Ensuite, nous pouvons initialiser la bibliothèque SDL_mixer en appelant la fonction
Mix_OpenAudio(). Cette fonction prend en argument la fréquence d'échantillonnage, le
format audio, le nombre de canaux et la taille du tampon audio. Par exemple, pour initialiser
la bibliothèque avec une fréquence d'échantillonnage de 44100 Hz, un format audio de 16
bits, 2 canaux et une taille de tampon de 4096 octets, nous pouvons utiliser :
Ensuite, nous pouvons charger un fichier audio en appelant la fonction Mix_LoadWAV().
Cette fonction prend en argument le nom du fichier audio à charger, et renvoie un objet
Mix_Chunk qui peut être utilisé pour jouer le fichier audio. Par exemple, pour charger le
fichier audio "[Link]", nous pouvons utiliser :
Ensuite, nous pouvons jouer le fichier audio en appelant la fonction Mix_PlayChannel().
Cette fonction prend en argument l'objet Mix_Chunk à jouer et le numéro du canal audio sur
lequel jouer le fichier audio. Par exemple, pour jouer le fichier audio sur le premier canal
audio, nous pouvons utiliser :
Il est important de noter que toutes les ressources créées à l'aide de la SDL_mixer doivent
être détruites à la fin du programme à l'aide de la fonction Mix_CloseAudio().
Création d'un menu
Maintenant que nous avons vu toutes les bibliothèques nécessaires, nous allons créer un petit
menu pour un jeu vidéo. Notre menu sera composé d'une image de fond, de boutons pour
démarrer le jeu et le quitter, et de texte pour afficher le titre et d’autres informations sur le jeu.