Überschreiben der Zeichnungsreihenfolge scene2Ds Bühne

8

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:

  • Die Methode Actor's toFront () funktioniert nur für ihre Geschwister.
  • tauscht Orte von 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

zu verstecken

    
Vjeetje 17.02.2014, 21:08
quelle

1 Antwort

1
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer22330408 ​​___

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.

%Vor%

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.

    
___ tag123scene2d ___ Scene2d ist ein 2D-Szenengraph zum Erstellen von Anwendungen und Benutzeroberflächen mithilfe einer Hierarchie von "Akteuren". In libGDX integriert. ___ tag123libgdx ___ LibGDX ist ein plattformübergreifendes Open-Source-Framework für die Entwicklung von Java-Spielen, das auf OpenGL (ES) basiert und auf Windows-, Linux-, Mac OS X-, Android-, iOS- und WebGL-fähigen Browsern läuft. ___ tag123scenegraph ___ Ein Szenengraph ist eine allgemeine Datenstruktur, die häufig von vektorbasierten Grafikbearbeitungsanwendungen und modernen Computerspielen verwendet wird, die die logische und oft (aber nicht notwendigerweise) räumliche Darstellung einer grafischen Szene anordnen. ___ qstnhdr ___ Überschreiben der Zeichnungsreihenfolge scene2Ds Bühne ___ qstntxt ___

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:

  • Die Methode %code% %code% () funktioniert nur für ihre Geschwister.
  • tauscht Orte von %code% auf der Bühne: Dies ändert die Transformationen, die %code% haben.

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

    
___
Chase 11.03.2014 16:11
quelle

Tags und Links