2012-02-29 2 views
5

저는 일반적으로 애플릿을 프로그래밍하고 Java GUI를 배우기 시작 했으므로 간단한 게임을 만들려고합니다. 지금은 메인 클래스 (Game)와 플레이어 클래스 (Player)를 가지고 있는데 플레이어에게 화면을 그려 넣었습니다.하지만 키 이벤트가 작동하는 데 어려움을 겪고 있습니다.KeyListener 이벤트가 Java 애플릿에서 실행되지 않는 것 같습니다.

플레이어 이미지가 완벽하게 표시되지만 키를 누를 때 위치가 변경되지 않습니다.

편집 : 플레이어 게시 잘못된 코드,

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) * "애플릿을 프로그래밍하고 Java GUI를 일반적으로 배우기 시작했습니다."* 애플릿을 피하고 프레임을 사용하여 학습합니다. 그들은 더 간단합니다. 2)이 천년기는 AWT 대신 Swing을 사용합니다. 3) 애플릿 크기가 HTML에 의해 설정되고,'init()'에서'setSize()'를 호출하지 마십시오. –

답변

8

패널 아마 중 하나에 포커스가없는, 또는 집중할 수 없습니다.


이 코드를 사용해보십시오. 왼쪽/오른쪽/위/아래 화살표로 키를 변경했습니다. 간단히하기 위해 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의 경우 'setFocusable (true);' –

관련 문제