2

ネットワーク ゲームの作成に関するオンライン チュートリアルを完了しました。ゲーム自体は、画面上でマウスをたどる小さな円です。

マウスの代わりにキーを使用して円を移動するようにコードを変更しています。しかし、以前にこれを行ったことがありますが、「JPanel」を使用したことがなく、円を移動するためのキーを取得するのに苦労しています。

ゲームの「クライアント」側は Client.java と DataPackage.java の 2 つのファイルのみで構成されており、(私の知る限り) 問題は Client.java にあるようです。

コード全体は非常に大きいので貼り付けませんが (必要に応じて貼り付けます)、ボールをマウスに追従させるビットを次に示します。

public Client()
    {
        this.addMouseMotionListener(new MouseMotionListener()
        {

            @Override
            public void mouseDragged(MouseEvent e)
            {
                x = e.getX();
                y = e.getY();
            }

            @Override
            public void mouseMoved(MouseEvent e) {}

        });
}

今、私はちょうど変更しようとしました

this.addMouseMotionListener(new MouseMotionListener()
            {

                @Override
                public void mouseDragged(MouseEvent e)
                {
                    x = e.getX();
                    y = e.getY();
                }

                @Override
                public void mouseMoved(MouseEvent e) {}

            });

this.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) { System.out.println( "tester"); }

            public void keyReleased(KeyEvent e) { System.out.println("2test2"); }

            public void keyTyped(KeyEvent e) { System.out.println("3test3"); }
        });

しかし、これは機能していないように見えたので、キーイングコードの場所を

public Client() { }

次に、ファイルの上部にある「implements」タグである可能性があると考えました。だから私は追加しました

implements KeyListener

最後まで

public class Client extends JComponent

しかし、これもうまくいかなかったので、さらに調査を行いました。

panel.setFocusable(true);

しかし、この情報のソースは、どこに置くべきか、どこに置いてもエラーをスローします

誰かが私のためにこれに光を当てることができますか?

4

1 に答える 1

4

スイングの第一人者である @camickr の記事「Motion using the keyboard」をご覧ください。使用KeyListenersには 2 つの大きな問題があります。コンポーネントはフォーカス可能である必要があり、フォーカスされている必要があります。KeyBindingsSwing で行う適切な方法は、キーを特定のアクションにバインドすることです。KeyBinding の使用方法

于 2013-09-15T18:39:55.777 に答える