Bonjour.
Je m'amuse avec C et SDL à refaire un "petit" street fighter pour me forger à ces languages.
Au début je mettais tout mon code dans le main.c histoire de tester un peu.
Maintenant, je suis en train de créer mes fonctions pour animer les personnages, les deplacer... et que j'inclu dans le main.
Et la, depuis... que des erreurs.
Peut etre a cause des pointeurs que j ai galéré pour ne plus avoir d erreur lors de la compilation, autre chose ??
Voici le prototype de ma fonction pour afficher Ryu:
void ryuAnim(int *nom, SDL_Surface *ecran, SDL_Rect *player_position);
Ma fonction animRyu()
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 void ryuAnim(int *nom, SDL_Surface *ecran, SDL_Rect *player_position) { int tempsPrecedent = 0, tempsActuel = 0; int i = 1; // 1 = Animation perso fixe // if(nom == 0) // { //SDL_Rect player_position; // player_position.y = py; //player_position.x = px; //initialisation des surfaces SDL_Surface *player_iddle_1 = NULL; SDL_Surface *player_iddle_2 = NULL; SDL_Surface *player_iddle_3 = NULL; SDL_Surface *player_iddle_4 = NULL; //Chargement des sprites player_iddle_1 = IMG_Load("img/ryu_idle_1.png"); if(player_iddle_1 == IMG_Load("img/ryu_idle_1.png") == -1) { fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); // Ecriture de l'erreur exit(EXIT_FAILURE); // On quitte le programme } else { printf("image 1 bien chargee \n"); } player_iddle_2 = IMG_Load("img/ryu_idle_2.png"); player_iddle_3 = IMG_Load("img/ryu_idle_3.png"); player_iddle_4 = IMG_Load("img/ryu_idle_4.png"); //transparence de l image SDL_SetColorKey(player_iddle_1, SDL_SRCCOLORKEY, SDL_MapRGB(player_iddle_1->format, 128, 128, 128)); SDL_SetColorKey(player_iddle_2, SDL_SRCCOLORKEY, SDL_MapRGB(player_iddle_2->format, 128, 128, 128)); SDL_SetColorKey(player_iddle_3, SDL_SRCCOLORKEY, SDL_MapRGB(player_iddle_3->format, 128, 128, 128)); SDL_SetColorKey(player_iddle_4, SDL_SRCCOLORKEY, SDL_MapRGB(player_iddle_4->format, 128, 128, 128)); // Animation tempsActuel = SDL_GetTicks(); if(tempsActuel - tempsPrecedent > 150) { tempsPrecedent = tempsActuel; if(i > 4) { i = 1; } SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); if(i == 1) { SDL_BlitSurface(player_iddle_1, NULL, ecran, player_position); SDL_Flip(ecran); if(SDL_BlitSurface(player_iddle_1, NULL, ecran, player_position) < 0) { fprintf(stderr, "Erreur fonction affichage : %s\n", SDL_GetError()); // Ecriture de l'erreur exit(EXIT_FAILURE); // On quitte le programme } } if(i == 2) { SDL_BlitSurface(player_iddle_2, NULL, ecran, player_position); SDL_Flip(ecran); } if(i == 3) { SDL_BlitSurface(player_iddle_3, NULL, ecran, player_position); SDL_Flip(ecran); } if(i == 4) { SDL_BlitSurface(player_iddle_4, NULL, ecran, player_position); SDL_Flip(ecran); } i++; } SDL_FreeSurface(player_iddle_1); SDL_FreeSurface(player_iddle_2); SDL_FreeSurface(player_iddle_3); SDL_FreeSurface(player_iddle_4); //} }
Pour appeler ma fonction dans le main
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 #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "anim_ryu.h" #include "ecran.h" int main(int argc, char *argv[]) { //Variable d 'evenment SDL_Event event; //1 le programme continue 0 on quitte int continuer = 1; SDL_Surface *ecran = NULL; // Creation de l'ecran SDL_Init(SDL_INIT_VIDEO); ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); void *pEcran = &ecran; //initialisation de la position du joueur SDL_Rect player_position; player_position.x = 220; player_position.y = 220; // J avai essayer de passer x et y a la fonction sans reussite SDL_Rect *pointeurPosition = &player_position; // On initialise la repetition des touches au clavier SDL_EnableKeyRepeat(10,10); while(continuer) { SDL_PollEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE: continuer = 0; break; case SDLK_RIGHT: break; case SDLK_LEFT: break; } } int x=200; // ca c est des variables que j ai essayé de passer int y = 200;// idem int nomanim = 0; // le type d animation a afficher int *pNomanim = &nomanim; ryuAnim(pNomanim, pEcran, pointeurPosition); } } return EXIT_SUCCESS; SDL_Quit(); }
J ai pas affiché tout mes includes...
Voila ce que code::block m'affiche
Project : SDL Application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\proprietaire\Mes documents\C C++\C\SDL\TEST anims evenements\
--------------------------------------------------------------------------------
Checking for existence: sdlapp.exe
Executing: "C:\Documents and Settings\proprietaire\Mes documents\C C++\C\SDL\TEST anims evenements\sdlapp.exe" (in .)
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings
Juste avant de poster le message il me disait que y'avai un probleme avec les pointeurs.
Ce que j'ai fai dans les blit de ma fonction, j'ai mis player_position au lieu de &player_position
Le programme se lance et se quitte imméditement apres la compilation.
Si j'enleve l'appel de la fonction ryuAnim la fenetre noire s'affiche correctement et j'appui sur ECHAP pour quitter le programme
En console j'utilisai sans probleme les fonctions avec pointeur mais là....
![]()
Partager