Implementieren von " Kings 'Corners " (verherrlichter Multiplayer-Solitaire) in Java.
Ich versuche, einem Spieler zu erlauben, eine Karte (ein Bild) von seiner Hand zu einer anderen Stelle auf dem Tisch zu ziehen. Das Problem ist, dass die Hand des Spielers "gefächert" ist, so dass die Bilder der Karten gedreht werden und sich überlappen.
Hier ist ein Beispiel für eine Hand:
Ich habe darüber nachgedacht, jede Karte zu einem JPanel
zu machen, aber das Problem ist dann, dass ich die Karte innerhalb ihrer rechteckigen JPanel
rotieren muss, wie sie selbst nicht können gedreht werden. Im Idealfall möchte ich vermeiden, dass Maus-x, y-Formeln bestimmen, welche Karte ausgewählt wird.
Wie kann ich mithilfe eines ereignisgesteuerten Ansatzes bestimmen, welche Karte aus der Hand ausgewählt wurde?
Implementieren von " Kings 'Corners " (verherrlichter Multiplayer-Solitaire) in Java.
Ich versuche, einem Spieler zu erlauben, eine Karte (ein Bild) von seiner Hand zu einer anderen Stelle auf dem Tisch zu ziehen. Das Problem ist, dass die Hand des Spielers "gefächert" ist, so dass die Bilder der Karten gedreht werden und sich überlappen.
Hier ist ein Beispiel für eine Hand:
Ich habe darüber nachgedacht, jede Karte zu einem contains(Point)
zu machen, aber das Problem ist dann, dass ich die Karte innerhalb ihrer rechteckigen Shape.contains()
rotieren muss, wie sie selbst nicht können gedreht werden. Im Idealfall möchte ich vermeiden, dass Maus-x, y-Formeln bestimmen, welche Karte ausgewählt wird.
Wie kann ich mithilfe eines ereignisgesteuerten Ansatzes bestimmen, welche Karte aus der Hand ausgewählt wurde?
AWT (und Swing) -Komponenten sind normalerweise rechteckig (an den Achsen ausgerichtet).
Aber das muss nicht der Fall sein - während die tatsächlichen Grenzen rechteckig sein müssen, kann die tatsächliche Fläche, die eine Komponente verwendet, kleiner sein. Die Komponente unterstützt eine %code% -Methode, die vom Ereignisverteilungsmechanismus aufgerufen wird, wenn die Frage auftaucht, zu welcher Komponente ein Punkt gehört - zum Beispiel für Mausklicks. (Das Überlappen verschiedener Komponenten wird von der Z-Reihenfolge im übergeordneten Container behandelt.)
Sie können diese Methode basierend auf der Methode %code% implementieren, indem Sie ein affines transformiertes Rechteck als Ihre Form verwenden. Jede Ihrer gedrehten Komponenten würde ihre eigene Form kennen (oder sie aus ihrer AffineTransform erzeugen, die gleiche, die auch für das Bemalen verwendet wird).
Haben Sie einen benutzerdefinierten LayoutManager, der auch Ihre Karten anordnet. (Verwenden Sie CardLayout trotz des Namens nicht.)
Ich bin mir nicht sicher, ob ich für jede Karte separate Komponenten verwenden würde, aber Sie benötigen sicherlich einige Objekte, die die gedrehten Rechtecke darstellen.
Tags und Links java events drag-and-drop mouse