Bonsoir, deja je prefere prevenir, je suis debutant en C++ et en SFML donc il est tout a fait possible que
j'ai oublie un truc tout con. je suis sous SFML 1.6.
voila mon probleme : je n'arrive pas a rendre le comportement de la gravite independant du nombre d'images par secondes dans ce code :
#include "cl_personnage.hpp"
void Personnage::Sauter()
{
if(Flag_contact_bas == true)
Vitesse_verticale = -IMPULSION_SAUT;
}
void Personnage::Droite()
{
if(Flag_nage == false)
Vitesse_horizontale = VITESSE_PERSONNAGE;
else
Vitesse_horizontale = VITESSE_PERSO_NAGE;
}
void Personnage::Gauche()
{
if(Flag_nage == false)
Vitesse_horizontale = -VITESSE_PERSONNAGE;
else
Vitesse_horizontale = -VITESSE_PERSO_NAGE;
}
void Personnage::Gravite(float& ElapsedTime)
{
// gravite "realiste"
if((Flag_contact_bas == false) & (Vitesse_verticale <= Vitesse_max))
Vitesse_verticale += (FORCE_GRAVITE*ElapsedTime);
// alternance de vitesse pour dissocier la gravite dans l'eau et dans l'air
if(Flag_nage == true)
{
Vitesse_max = VITESSE_MAX_NAGE;
if(Vitesse_verticale >= Vitesse_max)
Vitesse_verticale = 1;
}
else
Vitesse_max = VITESSE_MAX;
Sprite_perso->Move(0, Vitesse_verticale);
}
void Personnage::Mouvement(float& ElapsedTime)
{
Sprite_perso->Move(ElapsedTime * Vitesse_horizontale, ElapsedTime * Vitesse_verticale);
Vitesse_horizontale = 0;
}
alors que les deplacements droite gauche oui.
ca me rendrait un sacre service si vous pouviez trouver de quoi il s'agit !
quelques precisions, je ne retouche pas a la vitesse verticale en dehors de ce code, sauf pour la remetre a zero a quand je touche le sol si elle est > 0 donc rien a voir avec la chute.
Dans ma boucle de jeu, tout les conditions sont appeles en premier, puis viens la gravite, puis en dernier le mouvement.