Gestion clavier JS

Fermé
Hwaster Messages postés 3 Date d'inscription dimanche 28 septembre 2014 Statut Membre Dernière intervention 6 mars 2015 - Modifié par baladur13 le 6/03/2015 à 13:32
codeurh24 Messages postés 761 Date d'inscription samedi 29 mars 2014 Statut Membre Dernière intervention 8 septembre 2018 - 6 mars 2015 à 12:08
Bonjour a tous,

alors voila, je cherche a réaliser un petit jeu 2D en JS (jquerry) pour mon projet de fin d'année.

Mais j'ai des problèmes pour la gestion du clavier: je cherche a savoir quand le joueur appuie sur la touche et quand il la relâche. Mon problème étant qu'en gardant la touche enfoncée, la fonction est appelé en boucle. Existe t-il d'autres écouteurs? Ou est que je doit gérer sa avec des booleans?


function initialiser(evt){ 
 $(document).keydown(keyD);
 $(document).keyup(keyU);
}
function keyD(evt){
 switch(event.keyCode){
  case 39:
   perso.droiteD();
   break;
  case 37:
   perso.gaucheD();
   break;
  case 38:
   perso.jump();
   break;
 }
}
function keyU(evt){
 switch(event.keyCode){
  case 39:
   perso.droiteU();
   break;
  case 37:
   perso.droiteD();
 
 }
}



Merci d'avance
A voir également:

2 réponses

rimolas Messages postés 500 Date d'inscription mercredi 30 novembre 2011 Statut Membre Dernière intervention 18 janvier 2016 94
6 mars 2015 à 11:55
Déjà indente ton code, sinon on va plus s'en sortir et ensuite recherche bien 10 minutes sur Google, c'est très bien fourni là-dedans.
0
codeurh24 Messages postés 761 Date d'inscription samedi 29 mars 2014 Statut Membre Dernière intervention 8 septembre 2018 123
Modifié par codeurh24 le 6/03/2015 à 12:17
Oui tu est sur la bonne voie.

Le problème c'est que les appels des actions du perso ce fait quand la touche est enfoncé, ce qui fait que quand tu reste enfoncé ça fonctionne en boucle. Il te faut une variable booléen pour stopper cette boucle.

ta fonction keyU est a modifier pour permettre a n'importe quel touche de passer la variable a true.

tant que la variable est a false l'action du perso dans keyD ne se répétera pas
0