Forum de la communauté SFML

Aide => Général => Discussion démarrée par: cChaD le Juin 03, 2012, 01:26:17 pm

Titre: Problème Event
Posté par: cChaD le Juin 03, 2012, 01:26:17 pm
Bonjour,

Je teste le déplacement d'un personnage avec 4 frames [B,H,G,D] et j'ai surement un soucis avec les events car quand j'appuit sur une touche et environs 1sec sur une autre j'ai une "pause" de 1 seconde, donc je ne comprend pas :

voici le code:

    if (event.Type == Event::KeyPressed)
    {
        switch (event.Key.Code)
        {
            case Keyboard::Down:
                velY += 0.1;
                _persoActuel = BAS;
                _spritePlayer[_persoActuel].SetPosition(velX, velY);
                break;

            case Keyboard::Up:
                velY -= 0.1;
                _persoActuel = HAUT;
                _spritePlayer[_persoActuel].SetPosition(velX, velY);
                break;

            case Keyboard::Left:
                velX -= 0.1;
                _persoActuel = GAUCHE;
                _spritePlayer[_persoActuel].SetPosition(velX, velY);
                break;

            case Keyboard::Right:
                velX += 0.1;
                _persoActuel = DROITE;
                _spritePlayer[_persoActuel].SetPosition(velX, velY);
                break;

            default:
                break;
        }
    }
 
Titre: Re : Problème Event
Posté par: Orwel le Juin 06, 2012, 12:59:14 pm
Le code est juste. Tu devrais faire une sortie sur la console, pour voir si les évènements sont capturés aussitôt.
Titre: Re : Problème Event
Posté par: iota le Juin 06, 2012, 01:17:27 pm
Hello,

Si tu veux capturer l'état des touches du clavier en continu, je pense que tu devrais passer par sf::Keyboard::isKeyPressed() plutôt que les événements.
Titre: Re : Problème Event
Posté par: Raitosan le Juin 08, 2012, 09:30:02 am
iota a raison, les événements permettent de détecter quand l'utilisateur appuis sur une touche, mais pas si la touche est appuyer. Il faut donc passer par la fonction sf::Keyboard::isKeyPressed();