Bonjour ,Bonsoir
je code un jeu 2D un peu comme pokemon pour m'entrainer et j'utilise la SDL 1.2:
J'arrive a charger des images ,déplacer le sprite et tout.
Ensuite j'ai voulu utiliser la SDL 2 .
Mais quand j'ai voulu faire exactement la meme chose avec la sdl2 mon image n'avait pas la meme qualité que celle chargé avec la SDL 1.2
voici ma classe :
voici le code SDL 1.2:
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 #ifndef DECOR_H #define DECOR_H #include "SDL2/SDL.h" #include "SDL2/SDL_image.h" #include <stdio.h> #include "tilesol.h" #include <iostream> #include <fstream> class decor { private: typedef struct Gestion { SDL_Window *fenetre; SDL_Texture *texture; SDL_Renderer *renderer; } Gestion; Gestion Fenetre; TileSol *sol; SDL_Surface *tile; SDL_Rect positionCoucheSol; int hauteur, largeur, tab[50][50]; public: decor(); ~decor(); int creation_fenetre(); void creation_map(); }; #endif // DECOR_H
et l'image :
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 decor::decor() { Fenetre.fenetre=NULL; sol = new TileSol; tile = NULL; positionCoucheSol.x=0; positionCoucheSol.y=0; positionCoucheSol.h=400; positionCoucheSol.w=400; } int decor::creation_fenetre() { if(SDL_Init(SDL_INIT_VIDEO) != 0) { std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl; return -1; } Fenetre.fenetre = SDL_CreateWindow("Pokemon",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,400,400, SDL_WINDOW_SHOWN); if( Fenetre.fenetre ) { return 1; } else { fprintf(stderr,"Erreur de création de la fenêtre: %s\n",SDL_GetError()); return 0; } } void decor::creation_map() { tile = IMG_Load("/home/kristof/Pictures/tiles.png"); ifstream fichier("/home/kristof/Programmation/VRAIPOKEMONSAMERE/test.txt", ios::in); fichier.seekg(0, ios::beg); fichier >> largeur; fichier >> hauteur; for (int u = 0;u<largeur;u++) { for (int i =0;i<hauteur;i++) { fichier >> tab[u][i]; if(tab[u][i]==1) { positionCoucheSol.x=(i*400)/largeur; SDL_BlitSurface(tile,sol->get_sol(tab[u][i]),SDL_GetWindowSurface(Fenetre.fenetre),&positionCoucheSol); } if(tab[u][i]==2) { positionCoucheSol.x=(i*400)/largeur; SDL_BlitSurface(tile,sol->get_sol(tab[u][i]),SDL_GetWindowSurface(Fenetre.fenetre),&positionCoucheSol); } positionCoucheSol.x+=16; } positionCoucheSol.x=0; positionCoucheSol.y+=16; } SDL_UpdateWindowSurface(Fenetre.fenetre); // Mise à jour de la fenêtre pour prendre en compte la copie du sprite SDL_Delay(10000); } decor::~decor() { SDL_DestroyTexture(Fenetre.texture); SDL_DestroyRenderer(Fenetre.renderer); SDL_DestroyWindow(Fenetre.fenetre); SDL_Quit(); delete this; }
le code SDL 2:
et l'image :
On voit bien que la première image afficher certains pixels et pas l'autre
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 decor::decor() { Fenetre.fenetre=NULL; sol = new TileSol; tile = NULL; positionCoucheSol.x=0; positionCoucheSol.y=0; positionCoucheSol.h=400; positionCoucheSol.w=400; } int decor::creation_fenetre() { if(SDL_Init(SDL_INIT_VIDEO) != 0) { std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl; return -1; } Fenetre.fenetre = SDL_CreateWindow("Pokemon",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,400,400, SDL_WINDOW_SHOWN); if( Fenetre.fenetre ) { return 1; } else { fprintf(stderr,"Erreur de création de la fenêtre: %s\n",SDL_GetError()); return 0; } } void decor::creation_map() { Fenetre.renderer = SDL_CreateRenderer(Fenetre.fenetre,-1,SDL_RENDERER_ACCELERATED); tile = IMG_Load("/home/kristof/Pictures/tiles.png"); //SDL_CreateTextureFromSurface(Fenetre.renderer,tile); Fenetre.texture = SDL_CreateTextureFromSurface(Fenetre.renderer,tile); ifstream fichier("/home/kristof/Programmation/VRAIPOKEMONSAMERE/test.txt", ios::in); fichier.seekg(0, ios::beg); fichier >> largeur; fichier >> hauteur; for (int u = 0;u<largeur;u++) { for (int i =0;i<hauteur;i++) { fichier >> tab[u][i]; if(tab[u][i]==1) { positionCoucheSol.x=(i*400)/largeur; //cout<<SDL_BlitSurface(tile,sol->get_sol(tab[u][i]),SDL_GetWindowSurface(Fenetre.fenetre),&positionCoucheSol)<<endl; cout<<SDL_RenderCopy(Fenetre.renderer,Fenetre.texture,sol->get_sol(tab[u][i]),&positionCoucheSol)<<endl; cout<<SDL_GetError()<<endl; } if(tab[u][i]==2) { positionCoucheSol.x=(i*400)/largeur; cout<<SDL_RenderCopy(Fenetre.renderer,Fenetre.texture,sol->get_sol(tab[u][i]),&positionCoucheSol)<<endl; cout<<SDL_GetError()<<endl; } positionCoucheSol.x+=16; } positionCoucheSol.x=0; positionCoucheSol.y+=16; } SDL_RenderPresent(Fenetre.renderer); // Mise à jour de la fenêtre pour prendre en compte la copie du sprite SDL_Delay(10000); } decor::~decor() { SDL_DestroyTexture(Fenetre.texture); SDL_DestroyRenderer(Fenetre.renderer); SDL_DestroyWindow(Fenetre.fenetre); SDL_Quit(); delete this; }
J'ai déjà chercher et je n'ai pas trouvé.
Merci de votre aide.
Partager