2012-04-15 17 views
1

私はjavaで簡単なプラットフォームゲームを書き始めました。テストとして、私はこの単純な プログラムを書いて、矢印キーを押したときにアプレットの周りに長方形を動かしました。キーイベントはまったく発射されていません。コードは次のとおりです。Java - KeyListenerイベントが発射されない

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 
public class Game extends Applet implements Runnable, KeyListener 
{ 
    //setup data 
    Thread t; 
    Image buffimg; 
    Graphics draw; 
    Dimension dim; 

    //game variables 
    int charx = 400;//rectangles X and Y positions 
    int chary = 50; 
    boolean leftArrow = false; 
    public void init() 
    { 
     setSize(800, 500); 
     t = new Thread(this); 
     t.start(); 
     addKeyListener(this); 
    } 
    public void run() 
    { 
     while(true) 
     { 
      repaint(); 
      moveChar();//move the rectangle 
      try { 
       t.sleep(1000/30); 
      } catch (InterruptedException e) { ; } 
     } 
    } 
    public void keyPressed(KeyEvent e) 
    { 
     int k = e.getKeyCode(); 
     if(k == 37) 
     { 
      leftArrow = true; 
      charx--; 
     } 

    } 
    public void keyReleased(KeyEvent e) 
    { 
     if(e.getKeyCode() == 37) 
     { 
      leftArrow = false; 
     } 
    } 
    public void keyTyped(KeyEvent e) 
    { 
    } 
    public void moveChar() 
    { 
     //move rectangle on left arrow key press 
     if(leftArrow == true) 
     { 
      charx--; 
     } 
    } 
    public void paint(Graphics g) 
    { 
     g.drawRect(charx, chary, 100, 100); 
    } 
    public void update (Graphics g) 
    { 
     //double buffering 

     // initialize buffer 
     if (buffimg == null) 
     { 
      buffimg = createImage (this.getSize().width, this.getSize().height); 
      draw = buffimg.getGraphics(); 
     } 
     // clear screen in background 
     draw.setColor (getBackground()); 
     draw.fillRect (0, 0, this.getSize().width, this.getSize().height); 
     // draw elements in background 
     draw.setColor (getForeground()); 
     paint (draw); 
     // draw image on the screen 
     g.drawImage (buffimg, 0, 0, this); 
    } 
} 

どうして私はこれを修正する必要がありますか?

+0

左の問題に長方形を移動できます。最新バージョンのコードを実行したことはありますか? – Rob

+0

はい、私のEclipse設定に問題がありますか? – Joe

+0

アンドリューさん、ありがとうございました。 – Joe

答えて

4
this.requestFocusInWindow(); // end of init(), or better, in start() 
+0

+1 hmmm repaint(); moveChar();そして次にmoveChar();を実行します。 ? – mKorbel

1

私はあなたのコードを試しました。それは必要に応じて動作します。

イベントを受信する前に、描画領域をマウスで押してフォーカスを当てる必要があります。

これを自動的に行うには、次のコマンドを使用します。requestFocusInWindow()

+0

申し訳ありませんが、あなたのコードをテストしている間にAndrewが答えを投稿しました。 –

+0

+1 *「私はあなたのコードをテストしていた」*私はそれを気にしなかった、私はちょうど教育された推測だった。 ;) –

+0

クール、ありがとう。私はあまりにもあなたの投稿をupvoted。 :) –

関連する問題