Bonjour
Désireux de faire un jeu, j'ai décidé de suivre le tutoriel sur SDL présent sur le site. Sauf que je butte sur un point dès la première partie du tutoriel : le nom du fichier image (pour la charger) est mis dans une variable string. Sauf que c'est du C++ et je préfère utiliser du C. J'ai essayé de remplacer par un tableau de caractères mais malheureusement ça n'a pas marché.
J'aimerais pouvoir charger l'image à l'aide de la variable passé en paramètre. Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 Fichier main.c #include <stdlib.h> #include <stdio.h> #include <string.h> #include "SDL/SDL.h" #include "image.h" int main( int argc, char *argv[ ] ) { const int SCREEN_WIDTH = 800; const int SCREEN_HEIGHT = 600; const int SCREEN_BPP = 32; SDL_Surface *screen = NULL; //Surface qui concerne l'écran SDL_Surface *background = NULL;//L'arrière plan char fnBackground[25] = "sky.png";// Chaine pour charger l'image if( SDL_Init( SDL_INIT_VIDEO ) == -1 )//Chargement du mode vidéo. Un test vérifie si elle s'initialise { printf( "Can't init SDL: %s\n", SDL_GetError( ) ); return EXIT_FAILURE;// Si non, fermeture du programme avec un code d'erreur } atexit( SDL_Quit ); // La fonction atexit permet d'appliquer le code entre paranthèses à la fin du programme, ici SDL_Quit qui permet de fermer toutes les fonctions SDL screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_HWSURFACE );//Charge le mode vidéo dans l'écran if( screen == NULL )// Si cela a échoué (le pointeur retourne NULL) { printf( "Can't set video mode: %s\n", SDL_GetError( ) ); return EXIT_FAILURE;//Fermeture du programme avec un code d'erreur } SDL_WM_SetCaption( "Test Jeu", NULL ); background = load_image(fnBackground); apply_surface( 0, 0, background, screen ); SDL_Delay( 3000 ); return EXIT_SUCCESS; }Je précise que je suis sous Visual Studio.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Fichier image.c #include "SDL/SDL.h" #include "SDL/SDL_image.h" SDL_Surface *load_image( char filename[25] ) { //Surface tampon qui nous servira pour charger l'image SDL_Surface* loadedImage = NULL; //L'image optimisée qu'on va utiliser SDL_Surface* optimizedImage = NULL; //Chargement de l'image loadedImage = IMG_Load( filename ); //Si le chargement se passe bien if( loadedImage != NULL ) { //Création de l'image optimisée optimizedImage = SDL_DisplayFormat( loadedImage ); //Libération de l'ancienne image SDL_FreeSurface( loadedImage ); } //On retourne l'image optimisée return optimizedImage; } void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination ) { SDL_Rect offset; offset.x = x; offset.y = y; //On blitte la surface SDL_BlitSurface( source, NULL, destination, &offset ); }
Partager