Leçon 1 : Initiation
Présentation
Entamons notre découverte de la SDL, bibliothèque simple et portable sous Windows comme vous Linux qui vous permettra de gérer tout ce qui est nécessaire à un bon jeu.
Fonctionnalités
Juste pour décrire ce que SDL peut faire globalement : « SDL est une API multimédia multi-plateforme gratuite », c'est à dire une API de développement utilisée pour le développement multimédia, que ce soient des jeux, des émulateurs, des démos ou des applis multimédia, le tout trés facilement et en multi-plateforme, c'est à dire que le programme sera identique sous Win32 comme sous GNU/Linux, Unix, Solaris, BeOS, AROS... Mais un autre avantage de SDL, c'est que ce "wrapper" ne se contente pas de permettre l'utilisation de la couche vidéo, voici un bref résumé des différentes parties de SDL disponnibles :
- Vidéo
- Evénements
- Audio
- CD-ROM (audio)
- Threads
- Timers
- Endian independence (conversions)
Compilation avec SDL
Sous Unix
Pour compiler SDL sous Unix, vous devrez ajouter certaines options à votre appel au compilateur. Je partirai ici du fait que vous utilisez gcc mais la marche à suivre est la même pour ses homologues (icc...) Pour compiler avec SDL vous devrez ajouter les instructions :
-
sdl-config --cflagspermet d'inclure les fichiers d'en-tête ; -
sdl-config -libspermet de lier automatiquement les bibliothèques.
Sous gcc une ligne de commande générique est la suivante : gcc -o mon_programme mon_programme.c `sdl-config --cflags` `sdl-config -libs` -lSDL_image.
Avec Fenêtres
Pour compiler sous Win32, soit vous utilisez un IDE comme Dev-C++ qui comprend gcc comme compilateur, auquel cas vous pourrez rajouter dans les Options de votre Projet les instructions vues ci-dessus pour Unix/Linux. Si au contraire vous utilisez un IDE comme Visual-C++ (6 ou 7) il vous faudra juste ajouter les librairies (et leur dossier) à votre projet, la compilation passera alors sans probléme. Restent certains autres compilateurs : "Miracle C Workbench" ne supporte pas SDL à ma connaissance, et pour LCC-Win32 je n'ai pas encore eu l'occasion d'expérimenter.
Initialisation
Pour commencer, il vous faudra initialiser l'API en lui indiquant quelles parties vous souhaitez utiliser (vidéo, audio...). Pour ce faire, il suffit d'utiliser la fonction SDL_Init(). N'oubliez pas de clore SDL à la fin de votre programme via la fonction SDL_Quit(), mais pour être sûr de ne pas oublier vous pouvez utiliser la fonction atexit(). Voici un exemple :
#include <stdlib.h> #include <SDL/SDL.h> int main(int argc, char *argv[]) { if (SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0) { fprintf(stderr, "Impossible d'initialiser SDL: %s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit); // ... }
Voici la liste des modes de SDL disponnibles à utiliser avec la fonction SDL_Init() :
- SDL_INIT_AUDIO
- SDL_INIT_VIDEO
- SDL_INIT_CDROM
- SDL_INIT_TIMER
Une fois SDL initialisée, il vous reste à gérer les modes qui vous intéressent. Nous commencerons par nous intéresser à SDL_Video.
SDL_VIDEO
Bon, là encore rien de compliqué. Vous devez juste connaître la résolution de l'écran (640x480, 1024x768, 42x1010 : ce que vous voulez) ainsi que la profondeur des couleurs (en général 32 bits mais vous pouvez utiliser des couleurs 16 bits ou 8 bits pour plus de rapidité sur les faibles configurations). Nous allons également créer une surface Screen qui représentera l'écran dans sa totalité. Pour Initialiser SDL_Video, on emploie une simple fonction, comme suit :
SDL_Surface *Screen; Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); if (Screen == NULL) { fprintf(stderr, "Impossible de passer en 640x480 en 32 bpp !\n"); fprintf(stderr, "%s\n", SDL_GetError()); exit(1); }
Bon, désormais SDL est initialisée avec un mode vidéo parfaitement utilisable. Dans le prochain cours nous allons apprendre à l'utiliser de maniére compléte. Ce cours est un peu bref mais vous savez désormais comment initialiser et fermer proprement chaque partie de SDL.
Conclusion
Voilà, tout est en place, nous allons pouvoir passer aux choses sérieuses dans les prochains articles.