elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  ¿Cómo detectar varias teclas por teclado simultáneamente?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo detectar varias teclas por teclado simultáneamente?  (Leído 2,914 veces)
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
¿Cómo detectar varias teclas por teclado simultáneamente?
« en: 12 Julio 2016, 23:14 pm »

Verán, actualmente estoy programando un juego bastante simple en Java, pero hay una cosa. Cuando yo presiono la tecla de la flecha izquierda(por ejemplo) la nave empieza a moverse (lógicamente) hacia la izquierda, pero si mientras la tengo presionada, presiono espacio (para disparar), la nave se detiene.

Lo que quiero es que me orienten en cómo hacer que eso no suceda, es decir, que la nave no deje de moverse mientras tenga la tecla presionada independientemente si presiono espacio.

Es decir, me muevo, presiono espacio, que dispare, y si no he soltado la tecla, que no se detenga sino que siga moviéndome hasta que la suelte (en este ejemplo, la izquierda).


En línea

Gunhack

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Re: ¿Cómo detectar varias teclas por teclado simultáneamente?
« Respuesta #1 en: 13 Julio 2016, 08:12 am »

Para eso hay dos eventos, keyPressed y keyReleased.

Con un array añades la tecla pulsada al mismo cada vez que detectas un keyPressed, y si detectas keyReleased lo quitas del array.  :P


En línea

Gunhack

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Re: ¿Cómo detectar varias teclas por teclado simultáneamente?
« Respuesta #2 en: 13 Julio 2016, 17:36 pm »

Intenta probar esto y dime si es lo que necesitabas  :P

Código
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.util.ArrayList;
  4.  
  5. import javax.swing.*;
  6.  
  7. public class PruebaTeclas {
  8.  
  9. public static void main(String[] args) {
  10.  
  11. new WindowPrinc();
  12. }
  13.  
  14. }
  15.  
  16. class WindowPrinc extends JFrame {
  17.  
  18. private JLabel lDireccion, lCouunt;
  19. private int disp;
  20. java.util.List<String> Dir;
  21.  
  22.  
  23. public WindowPrinc() {
  24.  
  25. setTitle("Prueba");
  26. setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  27. setBounds(Toolkit.getDefaultToolkit().getScreenSize().width/2 - 100,
  28. Toolkit.getDefaultToolkit().getScreenSize().height/2 - 100,
  29. 100, 100);
  30.  
  31. setLayout(new FlowLayout());
  32.  
  33. lDireccion = new JLabel("Direccion: N/A");
  34. lCouunt = new JLabel("Disparos: 0");
  35. disp = 0;
  36. Dir = new ArrayList<>();
  37. Dir.add("N/A");
  38.  
  39. add(lDireccion);
  40. add(lCouunt);
  41.  
  42.        this.addKeyListener(new KeyAdapter() {
  43.  
  44. @Override
  45. public void keyPressed(KeyEvent e) {
  46.  
  47. int c = 0;
  48.  
  49. if(c == 0 && Dir.size() < 2) {
  50.  
  51. switch(e.getKeyCode()) {
  52.  
  53. case KeyEvent.VK_UP:
  54. Dir.add("ARRIBA");
  55. break;
  56. case KeyEvent.VK_DOWN:
  57. Dir.add("ABAJO");
  58. break;
  59. case KeyEvent.VK_LEFT:
  60. Dir.add("IZQUIERDA");
  61. break;
  62. case KeyEvent.VK_RIGHT:
  63. Dir.add("DERECHA");
  64. break;
  65. }
  66. c++;
  67. }
  68.  
  69. if(e.getKeyCode() == KeyEvent.VK_SPACE) {
  70. disp++;
  71. lCouunt.setText("Disparos: " + disp);
  72. }
  73.  
  74. lDireccion.setText("Direccion: " + Dir.get(Dir.size()-1));
  75. }
  76.  
  77. @Override
  78. public void keyReleased(KeyEvent e) {
  79.  
  80. switch(e.getKeyCode()) {
  81.  
  82. case KeyEvent.VK_UP:
  83. deleteKey("ARRIBA");
  84. break;
  85. case KeyEvent.VK_DOWN:
  86. deleteKey("ABAJO");
  87. break;
  88. case KeyEvent.VK_LEFT:
  89. deleteKey("IZQUIERDA");
  90. break;
  91. case KeyEvent.VK_RIGHT:
  92. deleteKey("DERECHA");
  93. break;
  94. }
  95.  
  96. lDireccion.setText("Direccion: " + Dir.get(Dir.size()-1));
  97. }
  98.  
  99. void deleteKey(String dir) {
  100.  
  101. for(int i = 0; i < Dir.size(); i++) {
  102.  
  103. if(dir == Dir.get(i)){
  104.  
  105. Dir.remove(i);
  106. }
  107. }
  108.  
  109. if(Dir.size() == 0) {
  110.  
  111. Dir.add("N/A");
  112. }
  113. }
  114. });
  115.  
  116. setVisible(true);
  117. }
  118. }
  119.  
  120.  
En línea

+ 1 Oculto(s)

Desconectado Desconectado

Mensajes: 298


un defecto se puede convertir en una virtud


Ver Perfil WWW
Re: ¿Cómo detectar varias teclas por teclado simultáneamente?
« Respuesta #3 en: 13 Julio 2016, 17:50 pm »

ohh funciona con varias teclas, tuve este mismo problema y recien veo la solucion
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines