Lors de la création du premier projet avec SDL2,
nous avions du ajouter dans le linker,
et dans cet ordre trois librairies "libmingw32, libSDL2main, et libSDL2".
On continue donc sur notre lancée :
• 1) Clic droit sur le nom du projet.
• 2) Dans le menu qui apparait, cliquez sur "Build options ...".
• 3) Dans la fenêtre qui s'ouvre "Project build options",
vérifiez que le nom du projet est sélectionné (donc pas simplement Debug ou Release,
mais tout).
• 4) Ajoutez à la suite des trois librairies précédentes, la librairies
libSDL2_image
Nous pouvons maintenant commencer à écrire le code qui nous permettra d'utiliser des images
avec de nombreux formats.
Ici nous allons simplement utiliser une image au format "png" avec un fond transparent,
et nous allons la dupliquer 3 fois mais a des échelles et des positions différentes.
L'image source que nous utilisons (disponible
ici) est un hélicoptère de type "Puma".
Cette fois nous ne donnerons pas le code entier, mais seulement les ajouts à placer dans
ce code pour obtenir la construction d'images présentée à la fin de cette partie.
L'utilisation des différentes fonction appartenant à SDL2_image nécessite l'ajout
d'un en-tête particulier :
#include <SDL_image.h>
Juste après l'initialisation nous pouvons déjà charger l'image avec la fonction suivante qui est compatible avec l'ensemble des formats présentés en introduction. Puisque l'image se nomme "puma.png", nous écrivons :
SDL_Surface *pumaImg = IMG_Load("puma.png");
Pour le positionnement et la réduction d'échelle de deux des images nous allons utiliser des zones rectangulaires :
SDL_Rect rect1, rect2;
rect1.x
= 60;
rect1.y
= 160;
rect1.w
= 300;
rect1.h
= 150;
rect2.x
= 600;
rect2.y
= 180;
rect2.w
= 100;
rect2.h
= 50;
Nous choisissons ensuite une couleur de fond (un fond nuageux donnerait plus de réalisme encore).
SDL_SetRenderDrawColor(pRendu,
40,
70,
80,
255);
// Choix de la couleur
SDL_RenderClear(pRendu);
// On applique la couleur
Nous transferons ensuite l'image dans une texture :
SDL_Texture *pTextureImage
=
SDL_CreateTextureFromSurface(pRendu,
pumaImg);
SDL_FreeSurface(pumaImg);
// On libère la surface devenue inutile
Les images sont ensuite appliquées dans la fenêtre.
SDL_RenderCopy(pRendu,
pTextureImage,
nullptr,
&rect1);
// image réduite (à gauche)
SDL_RenderCopy(pRendu,
pTextureImage,
nullptr,
&rect2);
// image réduite (à droite)
SDL_RenderCopy(pRendu,
pTextureImage,
nullptr,
nullptr);
// image plein écran
SDL_DestroyTexture(pTextureImage);
// on libère la texture devenue inutile
On termine en actualisant la fenêtre :
SDL_RenderPresent(pRendu);
A ce stade vous devriez pouvoir assez facilement écrire le code complet et obtenir la superposition de ces trois images à fond transparent.