Gibt es einen standard-Weg, um mit vielen verschiedenen Optionen für Mausereignisse in java?

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

  •  12-09-2019
  •  | 
  •  

Frage

Ich bin die Entwicklung einer grid-basierte sim-Spiel in java, und ich Frage mich, ob es einen standard-Weg, tun die folgenden.Ich habe ein panel, das ist das Spiel-panel, und es gibt viele verschiedene Dinge, die passieren könnte, wenn die Anzeige geklickt wird.Zum Beispiel, wenn Gebäude einen Raum, gibt es mehrere Bühnen, auf denen das ziehen der Maus und der linken Maustaste wird haben verschiedene Aktionen.Jetzt, so wie ich es getan haben, ist die Verwendung von Boolean Werte zu überprüfen, was gebaut wird, und dann was Phase ist es auf.

Gibt es eine bessere oder standard-Umgang mit so etwas?Ich hatte eine schnelle google, aber wie ich schon sagte, die Leute auf Stack Overflow geben immer eine besser, mehr relevant, up-to-date beantworten.

Ich halte mich noch Recht neu in java.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Sie könnten versuchen, in etwas ähnlich dem Strategie-Muster.

Im Grunde, Sie beginnen, indem Sie den Zimmer-Taste auf die Symbolleiste.Die Symbolleiste durch geht, und erzählt das raster zu verwenden, den 'Raum Platz" actionlistener.Vermutlich entfernen Sie alle vorherigen action-listener, der zugehört

Die Zimmer platzieren, actionlistener würde wiederum zu implementieren, alle interessanten Teil der Logik für Links - /Rechtsklick, ziehen, etc.

Wenn Sie über mehrere Stadien zu bauen, ein Zimmer (sagen wir, indem Türen, dann windows, dann trap-Türen);die action-Listener wäre verantwortlich für die übergabe die Kontrolle an die nächste Stufe:a bit of a finite state machine.

Also, starten Sie, indem Sie auf 'Zimmer' button, 'Ort, Platz' listener Hinzugefügt.Ziehen Sie den Bereich, den Sie wollen, den Raum zu sein, 'Ort, Platz' ändert die Spiel Zustand, dann ändert sich die actionlistener für die 'windows' - listener.Ad infinitum...bis Sie fertig sind.

Eine sehr einfache (nicht kompilierbare) Beispiel:

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

Nun, das nicht-übersetzbare Beispiel beiseite, Pyrolistical hat einen Punkt:Sie generell nicht möchten, kombinieren Sie Ihre Spiel-Modell und grafische Benutzeroberfläche in einem einzigen Klumpen Klassen.Sie möchten das Modell getrennt vom GUI und zu manipulieren, durch eine gut definierte Schnittstelle.

(Auch, wahrscheinlich gibt es bessere Methoden für den Gang zum entfernen der Maus-listener dann nur zufällig entfernen alle Zuhörer...Ich war ein wenig in Eile, sorry)

Andere Tipps

Es klingt wie Sie brauchen, um zu definieren Ihre Spiel-Modell/Stand und halten Sie Sie getrennt von Ihren Aktionen mit der Maus.

Verwenden Sie MVC?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top