ホームページ >Java >&#&チュートリアル >Java ゲームで、Swing KeyBinding を使用すると、2 人のプレイヤーが異なるキーを使用して別々のパドルを制御できるようになりますか?

Java ゲームで、Swing KeyBinding を使用すると、2 人のプレイヤーが異なるキーを使用して別々のパドルを制御できるようになりますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-21 00:27:17677ブラウズ

How Can Swing KeyBindings Enable Two Players to Control Separate Paddles Using Different Keys in a Java Game?

キー バインドの使用

2 人のプレーヤーが異なるキーを使用して別々のパドルを制御できるようにするという主な問題に対処するために、推奨される解決策は次のとおりです。スイングキーバインド。このアプローチには、次の利点があります。

  • キー バインディングは、ゲーム ロジックの残りの部分から分離されており、柔軟性が高まります。
  • キー バインディングは、ゲームが開始されていないときでも応答します。キーリスナーとは異なり、フォーカスします。

コード例

提供されたコード例は、Java アプリケーションでキー バインディングを実装する方法を示しています。

//Create a GameKeyBindings object associated with the game panel and the two paddle entities.
GameKeyBindings gameKeyBindings = new GameKeyBindings(gp, player1Entity, player2Entity);

GameKeyBindings クラス内で、キー バインディングはパドルの動きごとに定義されます。

//Key binding for Player 1's paddle: Up arrow key
gp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0, false), "W pressed");
gp.getActionMap().put("W pressed", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        entity.UP = true;
    }
});

//Key binding for Player 2's paddle: Down arrow key
gp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, false), "down pressed");
gp.getActionMap().put("down pressed", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        entity2.DOWN = true;
    }
});

// Similar key binding definitions for releasing the keys.

Collections.synchronizedSet(new) の説明HashSet())

Collections.synchronizedSet(new HashSet()) 行は、押されたキーを保存するための同期セットを作成します。同期セットを使用すると、データの破損や不整合を引き起こすことなく、複数のスレッドが同時にセットにアクセスして操作できるようになります。

提供されたコードでは、同期セットは、現在どのキーが押されているかを追跡するために使用されます。この情報は、ゲーム ロジックがどのパドルを動かすかを決定するために必要です。

追加情報

  • キー バインドは、キー入力を処理するための、キーを使用するよりも堅牢で洗練されたソリューションです。
  • 提供されているコード例は、シンプルで直接的な実装です。必要に応じて、さらに最適化や機能強化を追加できます。

以上がJava ゲームで、Swing KeyBinding を使用すると、2 人のプレイヤーが異なるキーを使用して別々のパドルを制御できるようになりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。