3

私がやろうとしているのは、swing コーディングの練習です。最初から長方形を作成し、フレーム上の x と y の位置を指定しました。私がやろうとしているのは、キー リスナーを使用して x 変数を更新し、左右に移動することです。

ここでは、アクション リスナーを実装するクラスを作成しました。

    public class Board extends JPanel implements ActionListener {

「x」変数と「y」変数を追加しました。

int x, y;
int dx;
int HEIGHT, WIDTH;
private final int DELAY = 50;

次に、いくつかの追加機能を示します。

    public Board() {

    setBackground(Color.BLACK);
    setFocusable(true);
    setDoubleBuffered(true);
    addKeyListener(new TAdapter());

    x = 15;
    y = 150;
    dx = 5;    //This is what I want to use to update the x variable if possible.

    HEIGHT = 15;
    WIDTH = 15;

}

これは、「x」変数と「y」変数を使用して正方形を作成した場所です。

public void paint(Graphics g) {
    super.paint(g);

    int red = 103;
    int green = 10;
    int blue = 100;
    Color square = new Color(red, green, blue);


    g.setColor(square);
    g.fillRect(x, y, WIDTH, HEIGHT);

    Toolkit.getDefaultToolkit().sync();
}

さて、私が達成しようとしていることについて説明します。

Action Performed メソッドに渡される「move」メソッドを作成し、キー イベントを処理する Key Adapter メソッドを作成しました。

    public void move() {
        x += dx;
    }

    public void actionPerformed(ActionEvent e) {
    move();
    repaint();
}


private class TAdapter extends KeyAdapter {

    public void KeyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = 1;
        }

        if (key == KeyEvent.VK_RIGHT) {
            dx = -1;
        }
    }   
}

ここに私が得ているもののスクリーンショットがあります:

左側に小さな紫色の四角がある黒いウィンドウ

すべては別のクラスを通じて明示されますが、さまざまな JFrame コンポーネント (サイズ、可視性など) を初期化し、プログラムを開始するだけです。

プログラムを実行すると、x 変数を更新できません。追加する必要があるものを誰かに教えてもらえますか?

ありがとう。

4

1 に答える 1

0

あなたの問題は、actionPerformed メソッドが呼び出されていないため、move() メソッドも呼び出されていないことだと思います。ActionListener を何にも追加していないため、まったく呼び出されません。このように keyPressed で move() と repaint() の両方を呼び出します

if( key == KeyEvent.VK_LEFT ) {
    dx = 1;
    move();
    repaint();
}

if( key == KeyEvent.VK_RIGHT ) {
    dx = -1;
    move();
    repaint();
}

私はそれがうまくいくと確信しています。また、あなたのコードで指摘したいことが 2 つあります。まず、keyPressed には大文字ではなく小文字の k があります。次に、ボタンで dx を使用した方法では、左ボタンを押すと、正方形が右に移動します。それは反対方向に行くでしょう。また、dann.dev がコメントで言及したように、少なくともその本の最初の章を読んでください。ビデオ ゲームでのダブル バッファリング、マルチスレッド化に関するヒントを提供し、使用できる素敵なループを提供します。

于 2012-07-02T23:14:30.347 に答える