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]KeyListener et plusieurs touches clavier en même temps


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut [Problème]KeyListener et plusieurs touches clavier en même temps
    Bonjour.

    Je me trouve face à une difficulté. Je crée un jeu (une sorte de ping-pong plus compliqué) à 2 joueurs utilisant le clavier pour jouer. Seulement pour jouer il serait plus simple de maintenir les touches "de direction" du joueur pour déplacer la raquette du joueur. D'où le problème: si les 2 joueurs restent appuyé en même temps, les actions des 2 touches ne sont pas répétées et donc le mouvement de chaque raquette s'arrête. J'espère être clair.

    Pour résoudre ce problème, je pensais faire 2 threads (un par joueur) qui gère les déplacements des raquettes appelé grâce à un KeyListener. Est-ce que ca marchera??? Est-ce que d'un point de vue hardware, un clavier peut envoyer 2 signaux de touches en même temps?
    Est-il possible d'utiliser un timer qui à chaque itération vérifie si telle ou telle touche est appuyée et qui lance pour chaque touche une méthode?

    Voilà... je suis en galère, et en plus je suis un grand débutant en Java... et en multithread!!!

    HELP, je dois rendre ce prgm fin de semaine!!!

    Merci!!!

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    Pas de chances, il va falloir sortir ton astuce du placard!

    Oui, la gestion des évenement fonctionne avec une pile. Quand tu appuie sur une touche, l'évenement est stocké dans une pile pour son traitement. Si tu appuies sur deux touches en même temps, alors c'est pas possible, il y en a forcément une qui est arrivée la première.

    Mais rassure toi, il existe une astuce vieille comme le monde pour gérer tout ça. Tu te rappelles des évenements keyPressed et keyReleased ? Et bien l'astuce est la suivante:

    une touche utilisée = 1 boolean qui dit si la touche est enfoncée ou non.

    Ce boolean tu le mets à true dans le keyPressed
    Ce boolean tu le mets à false dans le keyReleased

    Et tu fait le traitement ailleurs, dans un timer par exemples (solution pour débutant qui fonctionne bien). Cela te permettra de séparer l'évenementiel des touches et leur traitement, cela te permettra aussi de pouvoir gérer l'appuis sur une à autant qu'il y en a sur le clavier en même temps ( enfin s'il te le permet! )

    J'éspère t'avoir aidé!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    En fait, c'est exactement ce que j'ai fait, et ca marche très bien!!!!

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Ben oui, résolu!! J'ai fait comme tu l'as marqué avant que tu ne le marques en fait... et j'avais oublié de mettre le ptit tag "résolu".

    J'ai bien affecté des entiers qui stockaient une valeur non nulle (pour la direction de mes joueurs) quand on appuyait sur une touche, et je les remettaient à 0 quand on relachait la touche. Et comme j'avais un timer dans mon jeu, à chaque pas du timer, je déplacais mes joueurs en fonction de cet entier!

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    Nikel !

    Dis, on peut le voir ton jeu ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Si tu peux voir mon jeu??? J'pense que ca peut se faire, mais il ne faut pas t'attendre à qqch d'extraordinaire!!! C'est un jeu fait en moins de 2 semaines dans le cadre d'un projet à rendre pour mes études... Et c'est le 1er programme que je fais en java!!! Contacte-moi par MP si t'es interessé, car je ne pense pas que mon pote avec qui je l'ai fait accepte que je le diffuse directement sur le forum...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut comprehension
    Je suis desolé de deterrer se sujet resolu malgre tout, mais je suis dans le meme probleme que toi avec un shoot em up, et je n'arrive pas a faire appuyer sur deux touches en meme tmeps et que ca fonctionne.

    En lisant ce message j'ai vu que c'était exactemnt ce qu'il me fallait mais j'arrive pas à comprendre comment vous faite, et a quoi vous sert votre booleen.

    Si vous pouviez eclaircir, ou m'envoyer par mp un exemple ou cette portion de code, ce serait super :p


    Merci d'avance, et boonne continuation

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/11/2007, 14h36
  2. Intercepter plusieurs touches du clavier en même temps
    Par fabseven dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 13/03/2007, 18h20
  3. Réponses: 4
    Dernier message: 26/04/2006, 14h02
  4. Problème pour différencier plusieurs select avec le même nom
    Par vallica dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/04/2006, 11h35
  5. Tester l'état de plusieurs touches du clavier en même temps
    Par wikers dans le forum Composants VCL
    Réponses: 7
    Dernier message: 11/11/2004, 09h13

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