Bonjour, cela fait plusieurs jours que j'essaye de faire un tire dans mon jeu mais je ne suis pas satisfait du résultat. Pourriez-vous m'aider notamment sur la démarche a suivre pour réaliser un tire, comment le faire en faite ou me faire un début d'algorithme dans les grandes lignes.
Car après moulte difficulté rencontrer je suis arrivé a un résultat peu satisfaisant en faite je veux que 4 tire soit envoyer que je face une pression ou bien que je reste appuyer sur la touche de tire (V en l'occurrence).
Le problème c'est que soit j'ai un tire qui part ou 2 tires si je fait une pression, et si je reste appuyer sur la touche de tire alors 1 fois j'ai 2 tires et ensuite 4 tire.
Je trouve aussi que quand le tire part c'est saccadé.
Je vous met le jeu en téléchargement si sa vous dit de regarder :ShootHBX.rar
Je vous met une partie de mon code si vous voulez prendre le temps d'y jeté un oeil :
Dans le main je vous met juste le code de la boucle qui tourne toute les 20 millisecondes:
Ensuite la fonction move :
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 while(stop) { timeA = SDL_GetTicks(); if(timeA-lasttimeA>TIME) { stop=loop_event(events); if(ImgScr->NbBallScr) if(!pause) { move(BoardSpr,ImgScr,ClashSplit,initSdl,events,time,&count,&SFXsys,&SFXBallBall,&SFXBallScr,&SFXBlastBall,&SFXshoot,i,&gap); blit(BoardSpr,ImgScr,initSdl,time,grid); } lasttimeA=timeA; i++; /*Le i est mis dans move qui aura pour but de lancer dans la fonction move_shootStart les tires */ if(i==ImgScr->NbShootScr) i=0; } pause=events->key[events->tabkey[events->k_p]]; }
Voilà merci par avance pour votre aide.
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 void move(Sprites* S,dataImageScr* D, Clash_SplitScr* CS,InitSdl* A,EventsKeyMouse* E,TimeImgAnim** T,bool* count, FMOD_SYSTEM** sys, FMOD_SOUND** BallBall,FMOD_SOUND** BallScr,FMOD_SOUND** shoot,FMOD_SOUND** BlastBall,int i,int* gap) { int nb=0; nb=0; T=0; move_ball(S,D,CS,A,&*sys,&*BallScr); if(D->NbBallScr>=2) { clash_sortBallSplitScr(D); clash_ball(S,D,&*sys,&*BallBall); } move_ship(S,D,A,E); if(E->key[E->tabkey[E->k_v]] && i==0) *count=move_shootKey_V(D); /*cette fonction sert à vérifier si on a pas tiré*/ if(*count) { move_shootStart(S,D,&*sys,&*shoot,gap,i);/*cette fonction a pour but de déclencher le tire quand on appuie sur la touche V le 1er tire par ensuite le 2eme,3eme et 4eme on se sert de i pour dire que toutes les 20 millisecondes on lance le tire suivant quand on arrive au dernier tire on arrête et move shoot prends le relais*/ if(i==D->NbShootScr-1) { *count=FALSE; *gap=0; } } if(!*count) move_shoot(S,D,E,count,&*sys,&*shoot); /*move_shoot prends le relai de move_shootStart pour faire donc avancé les tire dans l'écran*/ if(D->shoot->ScrPos!=-1) clash_ShootBall(S,D,&*sys,&*BlastBall); if(D->NbBallScr==0) printf("Vous avez gagner\n"); }
Partager