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

2D Java Discussion :

Répétition de 2 caracteres à la fois?


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Par défaut Répétition de 2 caracteres à la fois?
    Bonjour, existe-t'il une methode permettant de répéter 2 caracteres "simultanément"? (Avec un seul keyListener)
    Mon code problématique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void keyPressed(...)
    int source =event.getKeyCode()
    if(source==KeyEvent.VK_RIGHT){
    ....}
    else if(source==KeyEvent.VK_LEFT){
    ....}
    else if(source==KeyEvent.VK_UP){
    ....}
    else if ....
    }
    Le probleme ici est qu'un seul caractere est traité à la fois, impossible de traité les autres caracteres s'il y a déjà appui sur un. Quelqu'un a t-il une solution pour remedier à ce probleme?

    Merci

  2. #2
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par ramdamriddim Voir le message
    Bonjour, existe-t'il une methode permettant de répéter 2 caracteres "simultanément"? (Avec un seul keyListener)
    Mon code problématique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void keyPressed(...)
    int source =event.getKeyCode()
    if(source==KeyEvent.VK_RIGHT){
    ....}
    else if(source==KeyEvent.VK_LEFT){
    ....}
    else if(source==KeyEvent.VK_UP){
    ....}
    else if ....
    }
    Le probleme ici est qu'un seul caractere est traité à la fois, impossible de traité les autres caracteres s'il y a déjà appui sur un. Quelqu'un a t-il une solution pour remedier à ce probleme?
    Oui, c'est possible de répéter 2 caracteres "simultanément". Voici une petite démo:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    /*
     * GameDemo.java
     */
     
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
     
    public class GameDemo extends JFrame {
     
        private GameDemo.GamePanel gamePanel;
     
        public GameDemo() {
            super("Arrows=red, A,D,W,S=black");
            setSize(400, 300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            gamePanel = new GamePanel();
            add(gamePanel);
            new Thread(gamePanel).start();
        }
     
        public static void main(final String[] args) {
            new GameDemo().setVisible(true);
        }
     
        class GamePanel extends JPanel implements KeyListener, Runnable {
     
            private int x1,  y1,  x2,  y2 = 100;
            private boolean right1,  left1,  up1,  down1,  right2,  left2,  up2,  down2;
            private int speed1 = 5,  speed2 = 2;
     
            public GamePanel() {
                addKeyListener(this);
                setFocusable(true);
                requestFocusInWindow();
            }
     
            public void keyTyped(final KeyEvent e) {
            }
     
            public void keyPressed(final KeyEvent e) {
                setKey(e, true);
            }
     
            public void keyReleased(final KeyEvent e) {
                setKey(e, false);
            }
     
            private void setKey(final KeyEvent e, final boolean b) {
                if (e.getKeyCode() == KeyEvent.VK_A) {
                    left1 = b;
                }
                if (e.getKeyCode() == KeyEvent.VK_D) {
                    right1 = b;
                }
                if (e.getKeyCode() == KeyEvent.VK_W) {
                    up1 = b;
                }
                if (e.getKeyCode() == KeyEvent.VK_S) {
                    down1 = b;
                }
                if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    left2 = b;
                }
                if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    right2 = b;
                }
                if (e.getKeyCode() == KeyEvent.VK_UP) {
                    up2 = b;
                }
                if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                    down2 = b;
                }
     
            }
     
            public void run() {
                while (true) {
                    if (left1) {
                        x1 -= speed1;
                    }
                    if (right1) {
                        x1 += speed1;
                    }
                    if (up1) {
                        y1 -= speed1;
                    }
                    if (down1) {
                        y1 += speed1;
                    }
                    if (left2) {
                        x2 -= speed2;
                    }
                    if (right2) {
                        x2 += speed2;
                    }
                    if (up2) {
                        y2 -= speed2;
                    }
                    if (down2) {
                        y2 += speed2;
                    }
                    repaint();
     
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
     
            @Override
            protected void paintComponent(final Graphics g) {
                super.paintComponent(g);
                g.fillOval(x1, y1, 10, 10);
                g.setColor(Color.RED);
                g.fillOval(x2, y2, 10, 10);
            }
        }
    }

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

Discussions similaires

  1. Répétition d'une expression réguliere n fois
    Par ManusDei dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/07/2012, 20h49
  2. Réponses: 4
    Dernier message: 16/11/2009, 16h07
  3. affichage de la chaine de caracteres "null" à chaque fois que je lance le job
    Par oudin.charles dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 24/07/2009, 18h12
  4. Réponses: 1
    Dernier message: 22/10/2007, 14h02
  5. Lire un même caractère 2 fois de suite
    Par H.Filbert dans le forum C
    Réponses: 12
    Dernier message: 01/05/2006, 15h25

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