Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu]Fonctionnement isKeyPressed et touches multiples  (Lu 2964 fois)

0 Membres et 1 Invité sur ce sujet

mites

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
[Résolu]Fonctionnement isKeyPressed et touches multiples
« le: Décembre 13, 2013, 02:43:13 pm »
Bonjour, voila mon pour la gestion du clavier

 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)){window.close();}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)){joueur.setAcc(20,0);}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q)){joueur.setAcc(-20,0);}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z)){joueur.setAcc(0,-20);}
 if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)){joueur.setAcc(0,20);}
 
(Ce code n'est pas dans la boucle évenement)

Je n'arrive pas à appuyer sur 2 touche en même temps, genre D et S.
Sur d'autre sujets, j'ai lu que ce pourrait être une limitation due au clavier, cependant sur d'autres jeux (orc must die 2 par exemple) j'arrive sans problème à appuyer sur ces même touches en même temps.

Du coup je me demande comment fonctionne isKeyPressed?
Cette fonction vérifie-t-elle en continue que la touche est enfoncée? auquel cas ça expliquerait assez clairement pourquoi on peut se retrouver limité par le clavier.

Ou alors ce serait un tableau de booléen qui serait tenu à jour dans keyboard(je ne l'ai pas vu dans la doc mais c'est peut-être privé), les booléens seraient mis à 1 lorsque l'on recoit un signal "appuie" et à 0 lorsque l'on reçoit un signal "relache".

J'ai le sentiment que  isKeyPressed utilise la 1ère méthode et orc must die 2 la 2ème, ce qui expliquerait pourquoi lorsque j'appuis sur plusieurs touches sur orcs cela fonctionne mais pas sur mon projet sfml, et cela expliquerait aussi pourquoi sur orc must die 2, j'ai parfois mon personnage qui se met a courir sans s'arrêter jusqu'à ce que j'enfonce et relache la touche qui correspond à la direction vers laquelle il se dirige alors que ce bug est inéxistant avec isKeyPressed (je pense que du coup quand on appuie sur 2 touche sur orcs on il se peut qu'en les relachant un seul signal soit détecté ce qui expliquerait pourquoi le personnage ne s'arrêterait pas)

Du coup je me pose des questions :
Si j'ai raison :
-Existe-t-il sur SFML un gestion du clavier, si non, est-il possible de le recréer avec les évenement SFML?
Si j'ai tort:
-Comment fonctionne IsKeyPressed, et pourquoi cela ne fonctionne-t-il pas comme sur mes autres jeux?
« Modifié: Décembre 14, 2013, 11:38:37 am par mites »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Fonctionnement isKeyPressed et touches multiples
« Réponse #1 le: Décembre 13, 2013, 05:45:43 pm »
A mon avis ça fonctionne (y a pas de raison que ça ne fonctionne pas), c'est juste que pour chaque touche tu réinitialises l'accélération, annulant les effets éventuels d'une autre touche déjà appuyée.
Laurent Gomila - SFML developer

mites

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Fonctionnement isKeyPressed et touches multiples
« Réponse #2 le: Décembre 14, 2013, 11:37:16 am »
En effet je suis bête, bien joué pour avoir trouvé ça sans cette partie de mon code ;)

 

anything