Erste Etappe Koordinaten der Schauspieler, der in der Tabelle in libGDX
Ich möchte erstellen Sie eine schwimmende helfen, die Blase einzuführen, die grundlegende Funktionsweise von meinem Spiel. Diese Blase sollte schweben über die Schauspieler will ich es erklären, wie in der Abbildung unten gezeigt.
Um dies zu erreichen, möchte ich die Koordinaten des Schauspielers, in diesem Fall die linke Taste, und dann kann ich hinzufügen, die Blase Schauspieler auf die Bühne, vor der alles andere. Der Letzte Teil ist einfach genug, aber ich habe Mühe mit dem empfangen der tatsächlichen Koordinaten der Taste, wie es ist in einer Tabelle.
Die zwei Schaltflächen Hinzugefügt, um eine Tabelle wie diese:
t.add(btnLab).expandX().center();
t.add(btnSea).expandX().center();
Ich habe versucht die naheliegendste Ansatz:
Vector2 loc = new Vector2(a.getX(), a.getY());
System.out.println("Loc: " + loc);
a.localToStageCoordinates(loc);
System.out.println("Loc: " + loc);
Gibt mir (in der Reihenfolge der sysouts): [0.0, 0.0] und [40.0, 130.0]. Die Letzte position ist eigentlich die position der Tabelle, füllt die Blaue Fläche auf dem Bildschirm. So ist dieser Ort natürlich findet etwas, das die Tabelle nicht auf Platz, der Schauspieler, und kann nicht verwendet werden (da ich nur am Ende mit dem Speicherort der Tabelle).
(Ich habe auch versucht, mit t.localToStageCoordinates hier, t ist dabei die Tabelle. Zu gleichen Ergebnissen.)
Andere Lösung, die ich versucht war zu rekursiv durchsuchen alle Eltern:
private static Vector2 getLoc(Actor a) {
return getLoc(new Vector2(a.getX(), a.getY()), a.getParent());
}
private static Vector2 getLoc(Vector2 loc, Actor g) {
System.out.println("Location: " + loc + ", Actor: " + g);
loc.x += g.getX();
loc.y += g.getY();
if(g.getParent() == null) return loc;
return getLoc(loc, g.getParent());
}
Leider, das gibt mir die gleichen. Die sysouts gibt die folgenden:
Location: [0.0:0.0], Actor: Table 40.0,130.0 944.0x508.0
Location: [40.0:130.0], Actor: Group 0.0,0.0 0.0x0.0
Location: [40.0:130.0], Actor: Group 0.0,0.0 0.0x0.0
Also ich kann nicht scheinen, um Holen Sie sich die aktuellen Positionen der Gruppen/Akteure innerhalb der Tabelle.
Wie soll ich das tun?
- In Ergänzung zu meiner Antwort, ich Frage mich, wenn Sie versuchen, um die position der Schauspieler vor dem ersten mal die Akteure gerendert werden? Wenn Sie versuchen, um die Lage, bevor der Rahmen hat Zeit gehabt, richtig zu machen ein layout, Sie werden immer die falschen Koords. In meinem Beispiel habe ich lindern können dies, indem Sie einen Ereignis-listener, um die korrekte position nach dem layout durchgeführt wurde.
- Ich habe eine
Table
innerhalb einerVerticalGroup
in einem anderenTable
in meinemStage
. Ich folgte dem unten Antwort, aber es hat nicht funktioniert. Das problem war, dass die Elemente nicht verlegt wurden, bevor ich beauftragte die Start-position des Tisches. Keiner der Bühne, Lage übersetzung, die Antwort war notwendig.table.getX()
hab mir die Lage in dem Stadium, dass ich brauchte, sobald ich habe es nach dem layout passiert. - Danke für den Tipp. Ich hatte das gleiche Problem. Dauerte eine lange Zeit zu erkennen, dass ich die Berechnung von Akteur-Positionen zu früh.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, ich verstehe, wo Sie waren verwirrt. Es ist eigentlich sehr einfach zu Holen Sie sich die Koordinaten der Bühne von Schauspieler (vorausgesetzt Bildschirm ausgerichtet, nicht gedrehte, nicht skalierten Akteure).
Alles, was Sie tun müssen, ist dieses:
Was Sie falsch machen, ist zu versuchen, um die Lage der Schauspieler, der relativ zu dem Tisch (mit Schauspieler.getX() und Schauspieler.getY()), und dann transformieren, dass die Lage auf der Bühne. Das wird am Ende geben Sie den Speicherort der Tabelle, weil es sein wird das hinzufügen der Position der Schauspieler. Was Sie wirklich, was ist, zu wissen, wo der Punkt new Vector2(0, 0) in Ihren Schauspieler ist. Dies sagt Ihnen, wo Sie die untere linke Ecke des Schauspielers ist. Wenn Sie möchten, oben Links, die Sie verwenden würden, new Vector2(0, Schauspieler.getHeight()), und die anderen Ecken in einer ähnlichen Weise.
Darüber hinaus, wenn Sie die Arbeit mit Ereignissen und möchte wissen, wie die Bühne, Ort der Veranstaltung, die Sie würde tun Sie einfach Folgendes:
Für ein vollständigeres Beispiel betrachten Sie den folgenden code:
Beim Klick btnLab einmal, auf btnSea einmal und dann schließen Sie das Fenster, Ausgänge:
Wie Sie sehen können, Sie wollen den "ZeroStage" - Meldung, denn das gibt Ihnen die Position des Schauspielers auf der Bühne.
a.getX(), a.getY()
ist0,0
, so würde das nicht bedeuten, dass die OP bereits tut genau das, was Sie vorschlagen?