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

Agents de placement/Fenêtres Java Discussion :

Evènement : Deux touches appuyées simultanément


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut Evènement : Deux touches appuyées simultanément
    Bonjour,

    Je me suis lancé dans la création d'un petit mario pour m'entrainer un peu et j'aimerais gérer un "saut long".
    C'est à dire que lorsque j'appui sur la touche "fleche droite" plus la touche "fleche haut" je saute non seulement en hauteur mais aussi sur la longueur.

    Je vous explique succintement le fonctionnement de mon programme.

    J'ai donc une classe Fenetre qui est une JFrame et qui gère l'appui de mes touches. Cette JFrame contient un objet de ma classe Plateau que j'ai défini comme JPanel. Il y a aussi une classe Joueur et Temps. Cette dernière créée un timer pour qu'on puisse voir le joueur sauter.

    Voici comment j'ai fait, étant débutant, il est possible que je m'y prend mal, n'hésitez pas à me reprendre :p

    Gestion des évènements liés au clavier dans la Classe Fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public void this_keyPressed(KeyEvent e) {
          boolean sautLongd = false;
          boolean sautLongg = false;
        switch (e.getKeyCode()) {
          case KeyEvent.VK_RIGHT:
              sautLongd = true;
            jeu.deplace(-20);
            break;
          case KeyEvent.VK_LEFT:
              sautLongg=true;
            jeu.deplace(20);
            break;
          case KeyEvent.VK_UP:
               jeu.sauter(sautLongd,sautLongg);
            break;
     
          default:
        }
      }
    L'appui de la touche "fleche haut" renvoi à la procédure sauter de la classe Plateau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void sauter(boolean sautDroite, boolean sautGauche) {
          joueur.saute(sautDroite, sautGauche);
        repaint();
      }
    Qui renvoi elle même à la procédure saute de la classe Joueur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void saute (boolean sautDroite, boolean sautGauche) {
            if(test==false)
            {
                LeTemps = new Temps(this,sautDroite,sautGauche);
                test=true;
            }
             }
    Et donc mon timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public void actionPerformed(java.awt.event.ActionEvent e) {
            if(sautD==true)
               { joujou.deplaceXDroite();
            joujou.deplaceY(); }
        else if(sautG==true)
            {joujou.deplaceXGauche();
            joujou.deplaceY();}
        else
            joujou.deplaceY();
        }
     
     
        public Temps(Joueur j, boolean sautDroite, boolean sautGauche)
        {
            sautD=sautDroite;
            sautG=sautGauche;
            joujou = j;
            timer = new javax.swing.Timer(DELAY,this);
            run();
        }
    Voila j'espère avoir été clair. Ma méthode avec les booléens semble ne pas fonctionner, j'aimerais donc avoir votre avis
    Merci.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Tu dois gérer plusieurs événements : le keyPressed, le keyReleased et le keyTyped. Ici, on va s'en ficher du keyTyped.

    Lors d'un appui sur une touche (appel de keyPressed), tu stockes cette touche dans un conteneur (liste, vecteur, ensemble, peu importe). Lorsque le joueur appuie sur une autre touche, tu vérifies si la première touche est toujours appuyée (toujours présente dans ton conteneur), et tu fais une action en fonction. Lors d'un appel à keyReleased, tu enlèves la touche du conteneur, évidemment.

    Et voilà, rien de plus compliqué, en fait

    P.S. Il est conseillé, pour les applications qui dessinent un écran, d'utiliser le l'objet java.awt.Canvas pour y dessiner plutôt qu'un JPanel. Canvas est là spécialement pour ça

  3. #3
    Membre chevronné
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Points : 2 061
    Points
    2 061
    Par défaut
    Cela m'aide aussi, merci de ta réponse ...

    Citation Envoyé par dingoth Voir le message
    Et voilà, rien de plus compliqué, en fait

    Mais non ^^.

Discussions similaires

  1. [Pygame]Gérer deux touches appuyées en même temps
    Par yetimothee dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 19/11/2008, 20h13
  2. [SFML] - Appui sur deux touches simultanément
    Par skysee dans le forum SFML
    Réponses: 1
    Dernier message: 17/09/2008, 09h30
  3. Event deux touches du clavier simultanément
    Par Orbiplanax dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 23/01/2008, 10h36
  4. Appui simultané sur les deux touches SHIFT
    Par dcmo5 dans le forum SDL
    Réponses: 31
    Dernier message: 12/11/2007, 15h32
  5. Evénement: 2 touches simultanément
    Par lamelfa dans le forum GLUT
    Réponses: 7
    Dernier message: 11/06/2006, 19h13

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