Heim >Java >javaLernprogramm >Wie können Swing KeyBindings es zwei Spielern ermöglichen, in einem Java-Spiel separate Paddles mit unterschiedlichen Tasten zu steuern?

Wie können Swing KeyBindings es zwei Spielern ermöglichen, in einem Java-Spiel separate Paddles mit unterschiedlichen Tasten zu steuern?

Linda Hamilton
Linda HamiltonOriginal
2024-12-21 00:27:17648Durchsuche

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

Verwenden von Tastenkombinationen

Um das Hauptproblem zu lösen, das darin besteht, zwei Spielern die Steuerung verschiedener Paddles mit unterschiedlichen Tasten zu ermöglichen, besteht die vorgeschlagene Lösung in der Verwendung Swing KeyBindings. Dieser Ansatz bietet die folgenden Vorteile:

  • Tastenbelegungen sind vom Rest der Spiellogik getrennt und ermöglichen eine größere Flexibilität.
  • Tastenbelegungen reagieren auch dann, wenn das Spiel nicht läuft Fokus, im Gegensatz zu Schlüssellistenern.

Codebeispiel

Das bereitgestellte Codebeispiel zeigt, wie Sie Tastenkombinationen in Ihrer Java-Anwendung implementieren:

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

Innerhalb der GameKeyBindings-Klasse werden Tastenkombinationen für die Bewegung jedes Paddles definiert:

//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.

Erklärung der Sammlungen. synchronisiertSet(new HashSet())

The Die Zeile „Collections.synchronizedSet(new HashSet())“ erstellt einen synchronisierten Satz zum Speichern der gedrückten Tasten. Durch die Verwendung eines synchronisierten Satzes stellen Sie sicher, dass mehrere Threads gleichzeitig auf den Satz zugreifen und ihn bearbeiten können, ohne dass es zu Datenbeschädigungen oder Inkonsistenzen kommt.

Im bereitgestellten Code wird der synchronisierte Satz verwendet, um zu verfolgen, welche Tasten aktuell gedrückt werden. Diese Informationen sind für die Spiellogik erforderlich, um zu bestimmen, welche Paddel sich bewegen sollen.

Zusätzliche Informationen

  • Es ist nicht erforderlich, separate Threads umzuschalten, um dies zu erreichen gewünschte Funktionalität.
  • Tastenkombinationen sind eine robustere und elegantere Lösung für die Handhabung von Tasteneingaben als die Verwendung von Tasten Zuhörer.
  • Das bereitgestellte Codebeispiel ist eine einfache und unkomplizierte Implementierung; Weitere Optimierungen und Erweiterungen können bei Bedarf hinzugefügt werden.

Das obige ist der detaillierte Inhalt vonWie können Swing KeyBindings es zwei Spielern ermöglichen, in einem Java-Spiel separate Paddles mit unterschiedlichen Tasten zu steuern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn