1

Java を使用して基本的なゲームを作成しようとしていますが、KeyAdapter に問題があります。私は以前に非常によく似たフォーマットを使用したことがあり、それを理解していると思っていましたが、これは私を困惑させました.

助けていただければ幸いです。これが私が取り組んでいるメインコードです

public class Board extends JPanel implements ActionListener{

Timer timer;
Tank tank = new Tank();

boolean boardset;

public Board(){
setBackground(Color.BLACK);

ImageIcon alien1ii = new ImageIcon(this.getClass().getResource("si_Alien1.png"));
Image alien1 = alien1ii.getImage();
ImageIcon alien2ii = new ImageIcon(this.getClass().getResource("si_Alien2.png"));
Image alien2 = alien2ii.getImage();
ImageIcon alien3ii = new ImageIcon(this.getClass().getResource("si_Alien3.png"));
Image alien3 = alien3ii.getImage();

timer = new Timer(5, this);
timer.start();

addKeyListener(new TAdapter());

JButton button = new JButton(new AbstractAction("hello2"){
    @Override
    public void actionPerformed(ActionEvent e){
        boardset = false;
    }
}); 
this.add(button);

//actual game
setFocusable(true);
setDoubleBuffered(true);
}

public void paint(Graphics g){
    super.paint(g);
    g.setColor(Color.WHITE);

    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(tank.getTank(), tank.getx(), tank.getY(), this);

    g2d.drawLine(0, (tank.getY()+25), 400, (tank.getY()+25));

    Toolkit.getDefaultToolkit().sync();     
    g.dispose();
}

public class TAdapter extends KeyAdapter{
    public void keyPressed(KeyEvent e){
        tank.keyPressed(e);
        System.out.println("pressedddddddddddddddddd");
    }
    public void keyReleased(KeyEvent e){
        tank.keyReleased(e);
    }
}

public void setBoardset(boolean x){
    boardset = x;
}

public boolean getBoardset(){
    return boardset;
}

@Override
public void actionPerformed(ActionEvent e) {
        repaint();
        tank.move();
    }

}

これは非常に簡単なように思えます。現在、この print ステートメントを使用して、クラスが実際にキーストロークを認識しているかどうかを確認しています: public class TAdapter extends KeyAdapter{ public void keyPressed(KeyEvent e){ tank.keyPressed( e); System.out.println("押されたdddddddddddddddd"); }

ただし、出力はありません。したがって、キーストロークをまったく認識していないと思われます。しかし、理由がわかりません。誰か提案があれば、私はそれをいただければ幸いです。明らかに、このバグを理解するのに役立つと誰かが考えている場合は、共有できるコードが他にもあります。

4

2 に答える 2

1

KeyListenerフォーカスの問題に苦しんでいます。リスナーが重要なイベントを通知されるようにするには、コンポーネントはフォーカス可能であり、かつフォーカスを持っている必要があります。

より良い解決策は、これらの制約を受けないキー バインディングを使用することです。

于 2013-07-26T01:25:11.923 に答える