2012-02-29 7 views
5

私はちょうどアプレットをプログラミングすることを学び始めましたし、Java GUIは一般的に、私は単純なゲームを作ろうとしています。現時点では、私はメインクラス(ゲーム)とプレーヤークラス(Player)を持っています。プレーヤーには画面に描画されていますが、私は主要なイベントを稼働させるのに苦労しています。KeyListenerイベントは明らかにJavaアプレットで起動しません

プレーヤーの画像は完璧に表示されますが、キーを押したときの位置は変わりません。

EDIT:プレイヤーのために掲示間違ったコード、

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);' –

関連する問題