Sie erhalten ein komplexes Scene2D
Diagramm in libgdx
mit mehreren Group's
und Actor's
. Sie möchten, dass der Benutzer Actors
auswählt und diese am Ende so zeichnet, dass sie oberhalb aller anderen Actors
angezeigt werden.
Ich möchte zweimal über Stage
iterieren. Beim ersten Mal wird die nicht ausgewählte Actors
gezeichnet, beim zweiten Mal wird die ausgewählte actors
gezeichnet. Ich sehe jedoch keinen "guten" Weg, um dieses Verhalten durchzusetzen.
Ich würde sauberere Optionen bevorzugen. Ich möchte nicht einfach eine ganze Methodenimplementierung für diesen kleinen Zusatz kopieren.
Was nicht funktioniert:
Actor's
toFront
() funktioniert nur für ihre Geschwister. Actor's
auf der Bühne: Dies ändert die Transformationen, die Actors
haben. Zu bedenkendes Szenario: Sie haben Root
mit einer Gruppe gA und eine Gruppe gB . Group
gA enthält zwei Bilder iA1 und iA2 . Group
gB enthält ein Bild iB . Da Group
gA zuerst zur Bühne hinzugefügt wird und das Bild iA1 mit iB überlappt; Jetzt möchten Sie iA1 auswählen und über iB erscheinen lassen. Ich möchte nicht nur gA.toFront () aufrufen; dies würde das ganze Group
gA in den Vordergrund stellen, was bedeutet, dass auch iA2 in den Vordergrund gestellt wird. Putting iA2 hat die unerwünschte Wirkung, Teile von Bildern in Group
gB
Es gibt zwei Lösungen -
1 - Stoppen Sie die Verwendung von [mehreren] Gruppen. Sucks, aber das könnte die leichtere Option sein. Wenn Sie sich ansehen, wie Rendering / Zeichnung ausgeführt wird, beginnen Sie bei der Stammgruppe für eine Bühne, holen Sie ihre untergeordneten Elemente und rendern Sie sie. Wenn es sich bei diesen Kindern um eine Gruppe handelt, rendern Sie diese Gruppen unter Kinder. ZIndex ist nichts anderes als die Reihenfolge der Kinder in einer Gruppe. Wenn Sie sich den Actor setZIndex
ansehen, können Sie sehen, warum toFront
oder setZIndex
nur Geschwister betreffen.
2 - Die einzige andere Option wäre, die Zeichnungsreihenfolge aller Akteure zu ändern. Sie müssten Stage
erweitern und die Methode draw
auf draw
basierend auf einer anderen Reihenfolge Ihrer Wahl ersetzen. Wahrscheinlich müssen Sie viele Funktionen aus der Group.drawChildren
-Methode integrieren.
TLDR; Die Art, wie Dinge in LibGDX implementiert werden - eine Gruppe ist eine Ebene. Wenn Sie keine Layer möchten, ändern Sie entweder die Gruppen oder beenden Sie die Verwendung von Gruppen.
Sie erhalten ein komplexes %code% Diagramm in %code% mit mehreren %code% und %code% . Sie möchten, dass der Benutzer %code% auswählt und diese am Ende so zeichnet, dass sie oberhalb aller anderen %code% angezeigt werden.
Ich möchte zweimal über %code% iterieren. Beim ersten Mal wird die nicht ausgewählte %code% gezeichnet, beim zweiten Mal wird die ausgewählte %code% gezeichnet. Ich sehe jedoch keinen "guten" Weg, um dieses Verhalten durchzusetzen.
Ich würde sauberere Optionen bevorzugen. Ich möchte nicht einfach eine ganze Methodenimplementierung für diesen kleinen Zusatz kopieren.
Was nicht funktioniert:
Zu bedenkendes Szenario: Sie haben %code% mit einer Gruppe gA und eine Gruppe gB . %code% gA enthält zwei Bilder iA1 und iA2 . %code% gB enthält ein Bild iB . Da %code% gA zuerst zur Bühne hinzugefügt wird und das Bild iA1 mit iB überlappt; Jetzt möchten Sie iA1 auswählen und über iB erscheinen lassen. Ich möchte nicht nur gA.toFront () aufrufen; dies würde das ganze %code% gA in den Vordergrund stellen, was bedeutet, dass auch iA2 in den Vordergrund gestellt wird. Putting iA2 hat die unerwünschte Wirkung, Teile von Bildern in %code% gB
zu verstecken
Tags und Links java libgdx scene2d scenegraph