Gèrer multi keyEvents avec Java

Fermé
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 - 26 août 2014 à 00:44
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 26 août 2014 à 07:40
Bonjour,

Je suis un débutant en Java que j'aime beaucoup. Je suis entrain de réaliser un jeu de ping pong, où je me suis bloqué au niveau des mouvements des raquettes.

l'appuie sur "a" monte la raquette_1 en haut et l'appuie sur "q" la descend en bas. De même "p" et "m" gère le mouvement de la raquette_2.

Mon problème c'est quand j'essaie de contrôler les 2 raquettes au même temps, les fonctions keyPressed et keyReleased ne se lance pas comme prévue.

Pour simplifier mon code, j'ai simulé le mouvement par affichage de texte représentant les boutons appuyés.

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PingPong extends JFrame implements KeyListener {

    private JPanel mainPanel = new JPanel();
    private boolean isAPressed;
    private boolean isQPressed;
    private boolean isPPressed;
    private boolean isMPressed;

    public PingPong() {
	this.setSize(400, 100);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	this.setLocationRelativeTo(null);
	this.setContentPane(mainPanel);
	this.setFocusable(true);
	this.addKeyListener(this);
    }

    @Override
    public void keyPressed(KeyEvent e) {
	char key = e.getKeyChar();
	switch (key) {
	case 'a':
	    isAPressed = true;
	    break;
	case 'q':
	    isQPressed = true;
	    break;
	case 'p':
	    isPPressed = true;
	    break;
	case 'm':
	    isMPressed = true;
	    break;
	}
	System.out.println("a is " + isAPressed + ", q is " + isQPressed
		+ ", p is " + isPPressed + ", m is " + isMPressed);
    }

    @Override
    public void keyReleased(KeyEvent e) {
	char key = e.getKeyChar();
	switch (key) {
	case 'a':
	    isAPressed = false;
	    break;
	case 'q':
	    isQPressed = false;
	    break;
	case 'p':
	    isPPressed = false;
	    break;
	case 'm':
	    isMPressed = false;
	    break;
	}
	System.out.println("a is " + isAPressed + ", q is " + isQPressed
		+ ", p is " + isPPressed + ", m is " + isMPressed);
    }

    @Override
    public void keyTyped(KeyEvent e) {
	// TODO Auto-generated method stub
    }

    public static void main(String[] args) {
	new PingPong().setVisible(true);
    }
}


Je remercie tous les internautes d'avance pour leurs aides.


A voir également:

2 réponses

Shadorc Messages postés 42 Date d'inscription jeudi 19 septembre 2013 Statut Membre Dernière intervention 9 mai 2015 2
26 août 2014 à 01:17
Bonsoir !

J'ai essayé ton code, je ne comprends pas le problème, quand j'appuie sur une touche la valeur passe à true, si je la relâche elle repasse à false, qu'est-ce qui ne va pas ?
0
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
26 août 2014 à 01:32
essaie de combiner plusieurs touches. et de relâcher kelkes unes, et vous allez voir que l'affichage s'arrête.
0
Shadorc Messages postés 42 Date d'inscription jeudi 19 septembre 2013 Statut Membre Dernière intervention 9 mai 2015 2
Modifié par Shadorc le 26/08/2014 à 02:53
J'ai déjà eu ce problème aussi, le KeyListener qui se bloque.
Il y a des questions similaires sur Internet mais je n'ai pas trouvé de solutions fiables, désolé.
(Si quelqu'un en a une, je suis aussi preneur)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
26 août 2014 à 07:40
Bonjour,

On a déjà eu cette discussion... Java keyListener multi touche
0