Est-il un moyen standard pour gérer de nombreuses options différentes pour les événements de la souris en java?

StackOverflow https://stackoverflow.com/questions/1241633

  •  12-09-2019
  •  | 
  •  

Question

Je développe un jeu de simulation basé sur la grille en java, et je me demandais s'il y a un moyen standard de faire ce qui suit. J'ai un panneau qui est le panneau de jeu, et il y a beaucoup de choses différentes qui pourraient se produire lorsque le panneau est cliqué. Par exemple, lors de la construction d'une salle, il y a plusieurs étapes, où glisser la souris et en cliquant sur la gauche aura différentes actions. En ce moment, la façon dont je l'ai fait, est d'utiliser booléens pour vérifier ce qui se construit, et à quel stade il est à.

Y at-il une meilleure façon ou d'une norme de gérer quelque chose comme ça? J'ai eu un rapide Google, mais comme je l'ai dit, les gens sur le débordement de pile donne toujours une meilleure, plus pertinente, jusqu'à réponse jour.

Je me considère encore assez nouveau java.

Merci d'avance.

Était-ce utile?

La solution

Vous pouvez essayer de regarder dans quelque chose de similaire au modèle de stratégie.

En fait, vous commencez en cliquant sur le bouton place sur votre barre d'outils. La barre d'outils passe par et indique la grille d'utiliser la ActionListener 'place de la pièce. Vraisemblablement éliminer tout auditeur d'action précédente qui a été à l'écoute

Le lieu de salle ActionListener mettrait en œuvre à son tour tout le bit intéressant de logique pour un clic gauche / droite, glisser, etc.

Si vous avez plusieurs étapes pour la construction d'une pièce (par exemple, en plaçant les portes, puis les fenêtres, puis portes dérobées); les auditeurs d'action seraient responsables du contrôle remise hors à l'étape suivante: un peu d'une machine à états finis.

Alors, commencez en cliquant sur le bouton « chambre », « chambre place » écouteur est ajouté. Faites glisser la zone que vous voulez que la chambre, « salle de place » modifie l'état du jeu, puis change la ActionListener à l'auditeur les «fenêtres de place de. Ad Infinitum ... jusqu'à ce que vous avez terminé.

Un très simple (non compilable) exemple:

class GridPanel extends JPanel
{
    void SetMouseListener(MouseListener newListener)
    {
        for(MouseListener ml : getMouseListeners())
            removeMouseListener(ml);
        addMouseListener(newListener);
    }
}

class ControlPanel extends JPanel
{
    GridPanel gameGrid;

    void OnRectangleButtonClicked(some stuff)
    {
        gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
    }
}

class PlaceRoomListener extends MouseAdapter
{
    GridPanel gameGrid;

    //constructor, etc

    void OnClick(mouse event)
    {
        gameGrid.doCoolStuff();
        gameGrid.SetMouseListener(new PlaceTrapDoorListener());
    }
}

//etc

Maintenant, cet exemple non compilable côté, Pyrolistical marque un point: vous ne voulez pas généralement de combiner votre modèle de jeu et l'interface graphique en une seule glob des classes. Vous voulez que le modèle séparé de l'interface graphique, et de le manipuler grâce à une interface bien définie.

(De plus, il y a probablement de meilleures méthodes pour aller sur la suppression de l'auditeur de la souris puis juste enlever au hasard tous les auditeurs ... J'étais un peu de précipitation, désolé)

Autres conseils

On dirait que vous devez définir votre modèle de jeu / état et le garder séparé de vos actions de la souris.

Utilisez-vous MVC?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top