Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Lustrike en 19 de Diciembre de 2014, 05:33:20 PM

Título: Problemas con KeyPressed - JAVA
Publicado por: Lustrike en 19 de Diciembre de 2014, 05:33:20 PM
Hola a todos.

Estoy trabajando en una demo de un juego hecha sobre JAVA, y el problema es el siguiente:

Al pulsar una tecla para moverme invoco a KeyPressed; el problema es que cuando me quiero mover de manera continuada con KeyPressed, ejecuta demasiados eventos (más de los que necesito). He probado varias cosas, pero siempre acaban procesándose eventos de más y al soltar se mueve más de lo que me gustaría realmente. ¿Se os ocurre alguna manera, o sabéis alguna forma de limitar el número de eventos que se capturan?

Gracias anticipadas.



Título: Re:Problemas con KeyPressed - JAVA
Publicado por: Lustrike en 26 de Diciembre de 2014, 01:50:04 PM
Me respondo a mí mismo.

Al final me dí cuenta de que es un problema de a que velocidad procesa el teclado cada tecla mientras está pulsada. Dado que no he encontrado nada que me convenza para mi caso en concreto, he optado por una solución un poco chapuza para mi gusto (dado que cada persona puede tener una velocidad en el teclado distinta), pero que por ahora dejaré hasta que encuentre una mejor:


    this.addKeyListener(new KeyAdapter() {

        public void keyPressed(KeyEvent evt) {
       
        if(numPulsaciones == 11 || veces < 2) {
        numPulsaciones = 0;
        veces++;
       
        switch(evt.getKeyCode()) {
        case KeyEvent.VK_UP: // ARRIBA.
        juego.moverPersonaje(1);
        break;
        case KeyEvent.VK_LEFT: // IZQUIERDA.
        juego.moverPersonaje(2);
        break;
        case KeyEvent.VK_RIGHT:         // DERECHA.
        juego.moverPersonaje(3);
        break;
        case KeyEvent.VK_DOWN: // ABAJO.
        juego.moverPersonaje(4);
        break;
        }
        }
        else {
        numPulsaciones++;
        }
        }
       
        public void keyReleased(KeyEvent evt) {
        numPulsaciones = 11;
        veces = 0;
        }
    });


Sigo abierto a sugerencias, pero por ahora creo que me doy por satisfecho.

Gracias.