Clavier : KeyReleased interrompt KeyPressed ?

CyberDenix Messages postés 17 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 24 décembre 2007 - 11 juil. 2005 à 18:13
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 12 juil. 2005 à 19:00
Bonjour,

Je suis actuellement en train de développer un petit zelda (pour le fun), et j'aimerai pouvoir changer d'arme tout en courant.
J'ai donc affecté les touches de changement d'arme aux touches 1 et 2 situés sous les touches F1 & cie.
Je déplace mon link avec les touches fléchées, bien évidemment .

Toutefois, lorsque je change d'arme tout en courant (en réalité lorsque j'appuie ou relache une touche quelconque pendant que je suis en train d'en presser une autre), l'évènement KeyPressed n'est plus écouté et mon link s'arrete de courir !
Pour qu'il reprenne sa course, je dois réappuyer sur une fleche.
Apparement le KeyPressed fait en sorte que le programme cesse d'écouter les évènements qui étaient en cours, et attends un nouvel ordre de frappe de touche. Un peu génant...

Je vous mets le petit bout de code :

public void keyTyped(KeyEvent kev)
{
if (kev.getKeyChar() == '&')
link.setWeapon("sword");
if (kev.getKeyChar() == 'é')
link.setWeapon("boomerang");
}
public void keyPressed(KeyEvent kev)
{
if (kev.getKeyCode() == java.awt.event.KeyEvent.VK_SPACE)
link.setAttackSprite();
if (kev.getKeyCode() == java.awt.event.KeyEvent.VK_UP)
link.setSprite("walk", "up", 16, 23);
if (kev.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN)
link.setSprite("walk", "down", 16, 24);
if (kev.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT)
link.setSprite("walk", "left", 18, 24);
if (kev.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT)
link.setSprite("walk", "right", 18, 24);
}
public void keyReleased(KeyEvent kev)
{}

Je ne vois vraiment pas comment faire...

6 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
11 juil. 2005 à 21:59
deja ... peut il marcher en meme temp vers le bas et le haut et la droite et la gauche ?!!
je ne pense pas donc il devrai y avoir des "else" entre chaque test ...

autrement pour comprendre le comportement du keyPressed tu peu faire un sysout de l'event ...
et si en effet il ne transmet plus l information apres l appuye d une autre touche tu peu le gerrer ...

GL

++
GodConan
0
CyberDenix Messages postés 17 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 24 décembre 2007
11 juil. 2005 à 23:58
J'ai fait des println(), tu penses bien !
En cas d'appuit prolongé sur deux touches, Java ne semble écouter que la touche pressée en dernier.
Comment puis-je donc gérer l'appui de deux touches simultanément ?

++
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
12 juil. 2005 à 06:45
en gerant toi meme la bufferisation des touche pressé ...

tu empile sur keyPressed et tu dépile sur keyReleased ...

me semble que je fait comme ca ds un de mes exempl es...

++

GodConan
0
CyberDenix Messages postés 17 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 24 décembre 2007
12 juil. 2005 à 12:13
C'est bien ce qu'il me semblait que j'allais devoir faire : une pile des évènements.
Bon ben, quand faut y aller...

Merci du conseil !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CyberDenix Messages postés 17 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 24 décembre 2007
12 juil. 2005 à 15:33
Je suis désolé mais je ne m'en sors vraiment pas !
Peux-tu me préciser la source ou tu utilises cela stp ?
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
12 juil. 2005 à 19:00
http://www.javafr.com/code.aspx?ID=31441

regarde la class Pong .. ; o) c est pas vraiment le top ;o) mais c est un exemple plus tard je fournirai surment un model plus évolué .. ;o) pour l instant celui ci fonctionne ;o)

GL

++

GodConan
0