Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Faren le Octobre 03, 2013, 02:07:14 pm

Titre: Déplacement personnage
Posté par: Faren le Octobre 03, 2013, 02:07:14 pm
  Bonjour,

Je reviens avec un problème que je ne sais pas résoudre (plus dur que le dernier  :P)
Je fais bouger un personnage créé dans une classe qui se nomme player, l'appel pour bouger le personnage se fait dans la boucle while. Mon personnage ne bouge presque pas (environ 1px par seconde) quand je reste appuyer sur une touche. Par contre quand je fais sauter mon personnage celui-ci saute bien et retombe normalement.

Je ne sais pas ce qui cloche.
le main
Player Perso;
while (window.isOpen())
    {
        sf::Event event;
        float elapsed = clock.restart().asSeconds();
        //float fps=(1.0/elapsed); // C'est pour calculer le nombre de fps
        //cout <<fps<<endl;
        float deplacement=speed*elapsed;

       Perso.gravite();
        vsaut=175;
        float dsaut=vsaut;
        dsaut+=gravity;

        while (window.pollEvent(event))
        {
                    if (event.type == sf::Event::Closed)
                       window.close();

                    if(event.key.code ==sf::Keyboard::Space && event.type==sf::Event::KeyPressed && Perso.getSauter()==true)
                    {
                        Perso.sauter(dsaut);

                    }


        }


if(sf::Event::KeyPressed)
       {

                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
                       {
                           Perso.mouvementGauche(deplacement);
                       }


                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                        {
                            Perso.mouvementBas(deplacement);
                        }


                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                        {
                            Perso.mouvementDroite(deplacement);
                        }


        }
 

Player.cpp
void Player::mouvementGauche(int vitesse)
{
    if(Scollision->collision(sPerso,Mmap->getSprite4())== false)
       sPerso.move(-vitesse,0);
    else sPerso.move(3,0);

    if(Scollision->collision(sPerso,Mmap->getSprite5())== false)
       sPerso.move(-vitesse,0);
    else sPerso.move(3,0);


}

void Player::mouvementBas(int vitesse)
{
      if(Scollision->collision(sPerso,Mmap->getSprite4())== false)
       sPerso.move(0,vitesse);
    else sPerso.move(0,-3);

    if(Scollision->collision(sPerso,Mmap->getSprite5())== false)
       sPerso.move(0,vitesse);
    else sPerso.move(0,-3);

}

void Player::mouvementDroite(int vitesse)
{
      if(Scollision->collision(sPerso,Mmap->getSprite4())== false)
       {sPerso.move(vitesse,0);}
    else sPerso.move(-3,0);

    if(Scollision->collision(sPerso,Mmap->getSprite5())== false)
       sPerso.move(vitesse,0);
    else sPerso.move(-3,0);

}

void Player::sauter(int haut)
{
    sPerso.move(0,-haut);
    saut=false;
}

Merci pour votre aide
Titre: Re : Déplacement personnage
Posté par: Laurent le Octobre 03, 2013, 02:30:17 pm
Citer
if(sf::Event::KeyPressed)
Sérieusement ? T'as lu la doc et les tutoriels ? :P

Sinon, essaye de prendre un float en paramètre de tes fonctions de mouvement, il est probable que ton déplacement par frame soit inférieur à 1 (donc 0 si converti en entier).
Titre: Re : Déplacement personnage
Posté par: Faren le Octobre 03, 2013, 02:38:43 pm
Merci le problème venait du float