IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème keyPressed/keyReleased appels multiples


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Problème keyPressed/keyReleased appels multiples
    J'ai identifié mon problème, assez simple finalement, mais je ne vois absolument pas comment le résoudre malgrès mes recherches via l'ami Google...

    J'ai une fenêtre avec un KeyListener, quand j'appuie sur espace, mon personnage "saute". Jusque là tout va bien.
    Mon Problème, je veux que si on relâche espace on ne puisse pas "ressauter" donc je met un booléen pour dire que le saut n'es pas autorisé après avoir relâché espace (j'autorise a nouveau le saut quand il touche "sol").
    Et là sa bloque car si on maintient espace, pour faire un grand saut, j'ai un appel en boucle à keyPressed puis keyReleased et ainsi de suite qui se produit. Tout se passe en fait comme si j'appuyai plein de fois de suite sur espace sauf que j'ai maintenu cette touche c'est le prog qui l'interprète ainsi. Du coup pendant que je maintien espace mon saut devient impossible...

    Ma question donc, comment prendre un compte un appui long en java sans avoir d'appel a keyRleased quand la touche est maintenu ? Ou sinon comment contourner le problème ?

    D'avance merci.

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    tu peux travailler avec des booléens

  3. #3
    Membre habitué
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 138
    Points
    138
    Par défaut
    Bonjour,

    Utilise peut etre un timer?

    Tu as un boolean "positionBarreEspace" qui indique la position de la barre Espace. A true si la barre est appuyée et à false sinon.


    Au départ ton boolean est à false.

    Lorsque tu es dans ta methode "KeyPressed", si elle a était déclenchée par la touche espace, tu mets le boolean à true et tu relance ton timer (méthode "restart").

    Lorsque tu es dans ta méthode ActionListener, si elle a était déclenchée par le timer, tu mets le boolean à false.

    En espérant que ca fasse ce que tu veux...

    Laurent

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    J'avais essayé un timer, ça stop bien le saut quand on arrive à la fin du temps mais du coup je ne peux pas arrêter le saut avant ( quand on relâche espace ).

    Pour le moment j'ai une "solution", j'utilise shift et ctrl qui n'appelle pas en boucle keyPressed et keyReleased quand ils sont maintenus et là ça marche...tant pis pour espace au pire.

  5. #5
    Membre habitué
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 138
    Points
    138
    Par défaut
    J'avais pas pensé à ce probleme.

    Juste par curiosité tu connais le temps entre 2 appels de "keyPressed" ?
    Parce que je suis étonné qu'il soit tellement long que cela gene la détection de la fin du saut.

    En effet, avec ma methode on est obligé dans le pire cas possible d'attendre ce temps la entre la fin de la pression sur la touche espace et le fait que cela soit pris en compte.

    Sinon, désolé mais j'ai pas d'autre idéé....

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Ah non c'est moi, j'avais mal appliqué ce que tu m'avais dit, désolé, non c'est parfait ça marche !

    Merci ! et bien vu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/11/2009, 18h38
  2. Problème de la selection multiple
    Par Muushi dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/10/2005, 02h53
  3. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 14h12
  4. [JFrame] [Win/Linux] Comportement keyPressed/keyReleased
    Par plegat dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/11/2004, 18h27
  5. [C#] Problème pour l'appel d'objet...
    Par AntiSAL dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2004, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo