Bonjour à tous =)
Je suis sur la réalisation d'un (très)petit Zelda pour m'entraîner à la programmation SDL.
Mais voilà je me retrouve face à un problème dont je ne vois absolument pas la source.
Lorsque j'utilise la fonction SDL_SetColorKey pour rendre le fond de mes sprites transparent , mon programme plante lors de l'appelle de la fonction qui contient SDL_SetColorKey :
(Ne vous moquez pas de mon code svp , je n'ai jamais été bon en organisation , mais j'essaie de programmer le plus clairement possible pour moi)
Mon code est séparé en 3 fichier.c et deux fichier.h
Tout d'abord le main :
Il permet de choisir entre play et option(pas encore créer de fonctions pour option)
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
89
90
91
92
93
94
95
96
97
98
99
100 #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "ChargementNiveau.h" int main(int argc, char *argv[]) { SDL_Surface *ecran = NULL, *Menu1 = NULL, *Menu2 = NULL; SDL_Rect positionMenu1, positionMenu2; SDL_Event event; int continuer = 1; int test = 0; SDL_Init(SDL_INIT_VIDEO); ecran = SDL_SetVideoMode(500, 500, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); SDL_WM_SetCaption("Legend Of Zelda", NULL); Menu1 = SDL_LoadBMP("DATA/Menu/Menu1.bmp"); Menu2 = SDL_LoadBMP("DATA/Menu/Menu2.bmp"); positionMenu1.x = 0; positionMenu1.y = 0; positionMenu2.x = 0; positionMenu2.y = 0; SDL_BlitSurface(Menu1, NULL, ecran, &positionMenu1); while (continuer) { SDL_PollEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_UP: SDL_BlitSurface(Menu1, NULL, ecran, &positionMenu1); test = 0; break; case SDLK_DOWN: SDL_BlitSurface(Menu2, NULL, ecran, &positionMenu2); test = 1; break; case SDLK_KP_ENTER: if(test == 0) { chargementNiveau(ecran , 1); } else if (test == 1) { SDL_BlitSurface(Menu2, NULL, ecran, &positionMenu2); } break; } break; } SDL_Flip(ecran); } SDL_FreeSurface(Menu1); SDL_FreeSurface(Menu2); SDL_Quit(); return EXIT_SUCCESS; }
Si on choisi play , alors le main fait appelle à la fonction chargementNiveau :
Qui une fois chargé fait appel à la fonction deplacerJoueur :
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 #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "ChargementNiveau.h" #include "DeplacerJoueur.h" void chargementNiveau(SDL_Surface *ecran, int niveau) { if(niveau == 1) { SDL_Surface *Map1 = NULL; SDL_Rect positionMap1; Map1 = SDL_LoadBMP("DATA/Niveau/Niveau1/Fond.bmp"); positionMap1.x = 0; positionMap1.y = 0; SDL_BlitSurface(Map1, NULL, ecran, &positionMap1); deplacerJoueur(ecran); } }
Et si je place mes SDL_SetColorKey dans ma fonction deplacerJoueur, mon programme plante une fois la fonction appeler =(
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
89
90
91
92
93
94
95
96
97 #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "DeplacerJoueur.h" #include "ChargementNiveau.h" void deplacerJoueur(SDL_Surface *ecran) { SDL_Event event; SDL_Surface *DroitArreter = NULL, *GaucheArreter = NULL , *GaucheMarche = NULL; SDL_Surface *DroitEpeeLever = NULL, *GaucheEpeeLever = NULL , *DroitMarche = NULL; SDL_Rect positionDroitArreter , positionGaucheArreter, positionDroitMarche; SDL_Rect positionDroitEpeeLever , positionGaucheMarche, positionGaucheEpeeLever; int continuer = 1; SDL_EnableKeyRepeat(10, 10); DroitArreter = SDL_LoadBMP("DATA/Sprite/Hero/DroitArreter.bmp"); GaucheArreter = SDL_LoadBMP("DATA/Sprite/Hero/GaucheArreter.bmp"); DroitEpeeLever = SDL_LoadBMP("DDATA/Sprite/Hero/DroitEpeeLever.bmp"); GaucheEpeeLever = SDL_LoadBMP("DATA/Sprite/Hero/GaucheEpeeLever.bmp"); DroitMarche = SDL_LoadBMP("DATA/Sprite/Hero/DroitMarche.bmp"); GaucheMarche = SDL_LoadBMP("DATA/Sprite/Hero/GaucheMarche.bmp"); positionGaucheMarche.x = 150; positionGaucheMarche.y = 217; positionDroitEpeeLever.x = 150; positionDroitEpeeLever.y = 217; positionGaucheEpeeLever.x = 150; positionGaucheEpeeLever.y = 217; positionDroitArreter.x = 150; positionDroitArreter.y = 217; positionGaucheArreter.x = 150; positionGaucheArreter.y = 217; positionDroitMarche.x = 150; positionDroitMarche.y = 217; SDL_BlitSurface(DroitArreter, NULL, ecran, &positionDroitArreter); while (continuer) { SDL_PollEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; break; case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_RIGHT: positionGaucheEpeeLever.x++; positionDroitEpeeLever.x++; positionDroitArreter.x++; positionGaucheArreter.x++; positionDroitMarche.x++; positionGaucheMarche.x++; SDL_BlitSurface(DroitArreter, NULL, ecran, &positionDroitArreter); break; case SDLK_LEFT: positionGaucheEpeeLever.x--; positionDroitEpeeLever.x--; positionGaucheArreter.x--; positionDroitArreter.x--; positionDroitMarche.x--; positionGaucheMarche.x--; SDL_BlitSurface(GaucheArreter, NULL, ecran, &positionGaucheArreter); break; } break; } SDL_Flip(ecran); } }
Je ne vois pas du tout d'où ça vient , j'espère que vous pourrez m'aider , et encore une fois désolé pour ce code assez chaotique.
Merci d'avance.
Partager