Maison >Java >javaDidacticiel >Comment Swing KeyBindings peut-il permettre à deux joueurs de contrôler des palettes distinctes à l'aide de différentes touches dans un jeu Java ?

Comment Swing KeyBindings peut-il permettre à deux joueurs de contrôler des palettes distinctes à l'aide de différentes touches dans un jeu Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 00:27:17646parcourir

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

Utilisation des raccourcis clavier

Pour résoudre le problème principal consistant à permettre à deux joueurs de contrôler des palettes distinctes à l'aide de touches différentes, la solution suggérée est d'utiliser Swing KeyBindings. Cette approche offre les avantages suivants :

  • Les raccourcis clavier sont séparés du reste de la logique du jeu et permettent une plus grande flexibilité.
  • Les raccourcis clavier sont réactifs même lorsque le jeu n'est pas en cours. se concentrer, contrairement aux auditeurs clés.

Exemple de code

L'exemple de code fourni montre comment pour implémenter des raccourcis clavier dans votre application Java :

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

Au sein de la classe GameKeyBindings, les raccourcis clavier sont définis pour le mouvement de chaque pagaie :

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

Explication de Collections.synchronizedSet( nouveau HashSet())

Le La ligne Collections.synchronizedSet(new HashSet()) crée un ensemble synchronisé pour stocker les touches enfoncées. En utilisant un ensemble synchronisé, vous vous assurez que plusieurs threads peuvent accéder et manipuler l'ensemble simultanément sans provoquer de corruption ou d'incohérence des données.

Dans le code fourni, l'ensemble synchronisé est utilisé pour suivre les touches actuellement enfoncées. Ces informations sont nécessaires à la logique du jeu pour déterminer quelles palettes doivent bouger.

Informations supplémentaires

  • Il n'est pas nécessaire de basculer des fils séparés pour atteindre l'objectif. fonctionnalité souhaitée.
  • Les raccourcis clavier sont une solution plus robuste et plus élégante pour gérer la saisie des touches que l'utilisation des touches auditeurs.
  • L'exemple de code fourni est une implémentation simple et directe ; d'autres optimisations et améliorations peuvent être ajoutées si nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn