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;
}
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());
}
Je pourrais simplifier les fonctions directionDroite et gauche plus tard ! mais en l’état mon problème est surement par là.

Merci !