Salut, je suis en train de faire un jeu d'aventure 2D en C++, un peu comme Super Mario, mais j'arrive pas a faire sauter mon personnage correctement :
Ici je récupère l'evenement, si on appuie sur 1, on charge le sprite de saut, puis on enclanche le chrono de la classe Timer (la même que dans l'un des tuto du site pour animer les frames d'un chat). Puis un peu plus tard, quelque part dans la boucle principale :
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 void Heros::recupEvent(SDL_Event event) { if(event.type == SDL_KEYDOWN) { switch(event.key.keysym.sym) { case SDLK_RIGHT: m_vitesse += (VITESSE_PERSO / FPS); break; case SDLK_LEFT: m_vitesse -= (VITESSE_PERSO / FPS); break; case SDLK_1: changeStance(SAUT); saut.start(); break; default: break; } } else if(event.type == SDL_KEYUP) { switch(event.key.keysym.sym) { case SDLK_RIGHT: m_vitesse -= (VITESSE_PERSO / FPS); break; case SDLK_LEFT: m_vitesse += (VITESSE_PERSO/ FPS); break; default: break; } } }
Qui appelle la fonction suivante, qui doit faire monter, puis descendre le héros selon une parabole :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (m_stance == SAUT) jump();
Mais ça ne marche pas : dès fois il se colle tout en haut, dois fois il reste en bas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void Heros::jump() { float x = saut.get_ticks(); m_position.y = (100*(x*x) + -200*x + (HAUTEUR_ECRAN - m_hauteur)); }
Partager