Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con KeyPressed - JAVA

Iniciado por Lustrike, 19 de Diciembre de 2014, 05:33:20 PM

« anterior - próximo »

Lustrike

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.




Lustrike

#1
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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.