2012-02-29 9 views
5

Acabo de empezar a aprender a programar applets, y la GUI de Java en general, intento hacer un juego simple. Por el momento, tengo la clase principal (Juego) y la clase de jugador (Jugador) tengo al jugador dibujando en la pantalla, pero estoy luchando para que los eventos clave funcionen, ¡cualquier ayuda apreciada!Eventos de KeyListener que aparentemente no se activan en Java applet

La imagen del reproductor se muestra perfectamente bien, pero la posición no cambia cuando presiono una tecla.

EDIT: código incorrecto publicado para el jugador, actualizado

Game.java:

public class Game extends Applet { 

    Player player; 

    @Override 
    public void init() { 
     player = new Player(this); 
     this.setSize(800, 600); 
     addKeyListener(player); 
    } 

    @Override 
    public void paint(Graphics g) {   
     player.paint(g); 
    } 



} 

Player.java:

public class Player implements KeyListener { 

    Game game; 
    Image image; 
    int x; 
    int y; 

    public Player(Game game) { 
     this.game = game; 
     x = 0; 
     y = 0; 
     image = game.getImage(game.getCodeBase(), "images/Player.png"); 
    } 

    public void paint(Graphics g) { 
     g.drawImage(image, x, y, game); 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     return; 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     switch (e.getKeyCode()) { 
      case KeyEvent.VK_A: 
       x -= 1; 
       break; 
      case KeyEvent.VK_D: 
       x += 1; 
       break; 
      case KeyEvent.VK_S: 
       y += 1; 
       break; 
      case KeyEvent.VK_W: 
       y -= 1; 
       break; 
     } 
     game.repaint(); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     return; 
    } 
} 
+2

1) * "Acabo de comenzar a aprender a programar applets, y la GUI de Java en general" * Evite los applets y aprenda usando marcos. Ellos son más simples. 2) Este milenio, use Swing en lugar de AWT. 3) El HTML establece un tamaño de applet, no llame a 'setSize()' en 'init()'. –

Respuesta

8

El panel probable que o bien no tener el foco, o no es enfocable


Pruebe este código. Cambié las teclas a las flechas izquierda/derecha/arriba/abajo. Para simplificar, lo dejé como un applet basado en AWT.

// <applet code='Game' width=400 height=100></applet> 
import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Game extends Applet implements KeyListener { 

    Player player; 

    @Override 
    public void init() { 
     player = new Player(getImage(32)); 
     addKeyListener(this); 
     setFocusable(true); 
     requestFocusInWindow(); 
    } 

    @Override 
    public void paint(Graphics g) { 
     player.paint(g); 
    } 

    public Image getImage(int size) { 
     Image img = createImage(size,size); 
     Graphics g = img.getGraphics(); 
     g.setColor(Color.RED); 
     g.fillRect(0,0,size,size); 

     g.dispose(); 

     return img; 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     return; 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     switch (e.getKeyCode()) { 
      case KeyEvent.VK_LEFT: 
       player.x -= 1; 
       break; 
      case KeyEvent.VK_RIGHT: 
       player.x += 1; 
       break; 
      case KeyEvent.VK_DOWN: 
       player.y += 1; 
       break; 
      case KeyEvent.VK_UP: 
       player.y -= 1; 
       break; 
     } 
     repaint(); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     return; 
    } 
} 

class Player { 

    Image image; 
    int x; 
    int y; 

    public Player(Image image) { 
     x = 0; 
     y = 0; 
     this.image = image; 
    } 

    public void paint(Graphics g) { 
     g.drawImage(image, x, y, null); 
    } 

} 
+2

+1 para 'setFocusable (true);' –

Cuestiones relacionadas