SDL animation

supermael Messages postés 3 Date d'inscription lundi 3 novembre 2008 Statut Membre Dernière intervention 3 novembre 2008 - 3 nov. 2008 à 12:37
supermael Messages postés 3 Date d'inscription lundi 3 novembre 2008 Statut Membre Dernière intervention 3 novembre 2008 - 3 nov. 2008 à 12:40
Bonjour tout le monde, je commence un petit jeux, pour m'entrainer. Il sera en vue de profil (on ne peut bouger que vers la droite ou vers la gauche) et le personnage est tout en bas de ma fenêtre. Pour gerer les deplacement ia pas de problème, mais je fait un petit code pour tester si j'arrive à faire les tir, sans els déplacement, bah apparemment non donc si vous pouviez m'aider et me dire ce qu'il ne va pas dans mon code ou du moins me donner une piste.
Code : C
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, #include <stdio.h>#include <stdlib.h>#include <SDL.h>#include <SDL_Image.h>#include <SDLP_Anim.h>#define SNKT 4#define VITESSE 5voidtir(SDL_Surface*ecran, SDL_Rect &pSnake);intmain(intargc,char*argv[]){SDL_Surface*ecran=NULL;SDLP_Animsnake;SDL_RectpSnake;intcontinuer=1,Action=SNKT;SDL_Eventevent;SDL_Init(SDL_INIT_VIDEO);ecran=SDL_SetVideoMode(300,300,32,SDL_HWSURFACE|SDL_DOUBLEBUF);SDL_WM_SetCaption("Mini jeu - tir",NULL);//animation du perso qui tireSDLP_LoadAnim(&snake,"snake3.bmp",3,500/VITESSE,SDLP_GAUCHE,SDLP_INFINI,SDLP_TOUCHE);pSnake.x=0+50;//position du joueurpSnake.y=300-59;//repetition des touchesSDL_EnableKeyRepeat(10,10);/* Activation de la répétition des touches */while(continuer){SDL_PollEvent(&event);switch(event.type){caseSDL_QUIT:
continuer=0;break;caseSDL_KEYDOWN:
switch(event.key.keysym.sym){caseSDLK_SPACE :
Action=SNKT;tir(ecran, &pSnake);break;default:SDLP_BlockTouch(&snake,SDLP_BLOCKED);break;}break;}SDLP_Touch(event,&snake);SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));switch(Action){caseSNKT :
SDLP_SetColorKeyAnim(&snake,0,117,117);SDLP_BlitAnim(&snake,ecran,pSnake);break;}SDL_Flip(ecran);}SDLP_FreeAnim(&snake);SDL_Quit();returnEXIT_SUCCESS;}void tir(SDL_Surface *ecran, SDL_Rect &pSnake)//fonction des tir, qui créer des balles.{SDL_Surfaceballe;//surface de la balleSDL_RectpBalle;inttempsActuel=0,tempsPrecedent=0;balle=IMG_Load("balle.bmp");pBalle.x=pSnake.x+25;//coordonnées de la balle étant au bout du fusil du persopBalle.y=pSnake.y+15;tempsActuel=SDL_GetTick();//boucle pour deplacer la balleif(tempsActuel-tempsPrecedent>30){pBalle.x+=20;tempsActuel=tempsPrecedent;SDL_BlitSurface(balle,NULL,ecran,&pBalle);SDL_Flip(ecran);}}

Sa marche bien, je peux marcher et les animation sont correct, mais le problème c'est que quand je tir, déjà je ne sais pas comment faire pour que l'animation ne se joue qu'une fois quand je presse la touche espace et ensuite les balles ne bougent pas, elles restent près de mon perso. Je pense que c'est pasrce que les coordonnées des balle sont dans ma fonction mais je ne sais pas où les mettre.

2 réponses

supermael Messages postés 3 Date d'inscription lundi 3 novembre 2008 Statut Membre Dernière intervention 3 novembre 2008
3 nov. 2008 à 12:39
Oula il y a un bug avec le code

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, #include <stdio.h>#include <stdlib.h>#include <SDL.h>#include <SDL_Image.h>#include <SDLP_Anim.h>#define SNKT 4#define VITESSE 5voidtir(SDL_Surface*ecran, SDL_Rect pSnake);intmain(intargc,char*argv[]){SDL_Surface*ecran=NULL;SDLP_Animsnake;SDL_RectpSnake;intcontinuer=1,Action=SNKT;SDL_Eventevent;SDL_Init(SDL_INIT_VIDEO);ecran=SDL_SetVideoMode(300,300,32,SDL_HWSURFACE|SDL_DOUBLEBUF);SDL_WM_SetCaption("Mini jeu - tir",NULL);//animation du perso qui tireSDLP_LoadAnim(&snake,"snake3.bmp",3,500/VITESSE,SDLP_GAUCHE,SDLP_INFINI,SDLP_TOUCHE);pSnake.x=0+50;//position du joueurpSnake.y=300-59;//repetition des touchesSDL_EnableKeyRepeat(10,10);/* Activation de la répétition des touches */while(continuer){SDL_PollEvent(&event);switch(event.type){caseSDL_QUIT:
continuer=0;break;caseSDL_KEYDOWN:
switch(event.key.keysym.sym){caseSDLK_SPACE :
Action=SNKT;tir(ecran, pSnake);break;default:SDLP_BlockTouch(&snake,SDLP_BLOCKED);break;}break;}SDLP_Touch(event,&snake);SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));switch(Action){caseSNKT :
SDLP_SetColorKeyAnim(&snake,0,117,117);SDLP_BlitAnim(&snake,ecran,pSnake);break;}SDL_Flip(ecran);}SDLP_FreeAnim(&snake);SDL_Quit();returnEXIT_SUCCESS;}void tir(SDL_Surface*ecran, SDL_Rect pSnake)//fonction des tir, qui créer des balles.{SDL_Surfaceballe;//surface de la balleSDL_RectpBalle;inttempsActuel=0,tempsPrecedent=0;balle=IMG_Load("balle.bmp");pBalle.x=pSnake.x+25//coordonnées de la balle étant au bout du fusil du persopBalle.y=pSnake.y+15tempsActuel=SDL_GetTick();//boucle pour deplacer la balleif(tempsActuel-tempsPrecedent>30){pBalle.x+=20;tempsActuel=tempsPrecedent;SDL_BlitSurface(balle,NULL,ecran,&pBalle);SDL_Flip(ecran);}}
0
supermael Messages postés 3 Date d'inscription lundi 3 novembre 2008 Statut Membre Dernière intervention 3 novembre 2008
3 nov. 2008 à 12:40
Bon désolé pour le code, j'arrive pas à le mettre.
0
Rejoignez-nous