Bonjour à tous.
En développant un petit Mario Like, je me suis rendu compte que suivant le PC où je me trouvais, mon personnage n'allait pas à la même allure...
Il peux aller soit très vite soit très lentement. J'ai beau chercher je ne vois pas où est le problème....
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 bool Personnage::animSuivantePerso(unsigned int & temps) // M'indique si je peux afficher le sprite suivant où non. { tempsAnim += temps; if (tempsAnim >= VITESSE_MOUVEMENT_PERSO) { tempsAnim = temps; return true; } else return false; }
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 void directionGauche(Personnage *persoMario, int &etatAnimPerso, unsigned int &tempsEcoule, Map &map) { persoMario->initGauche(); if (persoMario->animSuivantePerso(tempsEcoule)) // Si je peux, on passe à la suivante. { if (etatAnimPerso < 2) etatAnimPerso++; else etatAnimPerso = 0; } if (!persoMario->getBas()) map.xscroll -= VITESSE_DEPLACEMENT; if (map.xscroll < 0) map.xscroll = 0; }Je pourrais simplifier les fonctions directionDroite et gauche plus tard ! mais en l’état mon problème est surement par là.
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 void jeu(Map &map, SDL_Renderer *&pRender, Personnage *persoMario) { Input entréeTouches; unsigned int debutBoucle(0), tempsEcoule(0); int etatAnimPerso(3); do // attend qu'on quitte l'application. { debutBoucle = SDL_GetTicks(); entréeTouches.updateEvenements(); if (entréeTouches.getTouche(SDL_SCANCODE_ESCAPE)) break; // sors de la boucle. if (entréeTouches.getTouche(SDL_SCANCODE_DOWN)) { persoMario->initBas(); } if (entréeTouches.getTouche(SDL_SCANCODE_RIGHT)) { directionDroite(persoMario, etatAnimPerso, tempsEcoule, map); } else if (!persoMario->getGauche()) persoMario->initArret(); if (entréeTouches.getTouche(SDL_SCANCODE_LEFT)) { directionGauche(persoMario, etatAnimPerso, tempsEcoule, map); } else if (persoMario->getGauche()) persoMario->initArret(); if (entréeTouches.getTouche(SDL_SCANCODE_RIGHT) && entréeTouches.getTouche(SDL_SCANCODE_LEFT)) { persoMario->resetGauche(); etatAnimPerso = 0; } AfficherMap(pRender,map); AfficherPerso(pRender,persoMario, etatAnimPerso); tempsEcoule = SDL_GetTicks() - debutBoucle; if (tempsEcoule < FRAMERATE) SDL_Delay(FRAMERATE - tempsEcoule); } while (!entréeTouches.quitter()); }
Merci !
Partager