Nach der Frage nach den Seitenverhältnissen bin ich gespannt, was andere Benutzer bei der Arbeit an 2D-UI-Systemen verwenden (höchstwahrscheinlich ihre eigenen Lösungen). Wie gehen Sie konkret mit Koordinatensystemen um? Meiner Meinung nach gibt es drei Möglichkeiten:
- Hartcodierte Koordinaten (zB: 0 -> 720, 0 -> 576)
- Normalisierte Koordinaten (0.0 -> 1.0, 0.0 -> 1.0), die vor dem Rendern in reale Koordinaten abgebildet werden
- Virtuelle Koordinaten (zB: 0 -> 1600, 0 -> 1000), die vor dem Rendern in reale Koordinaten abgebildet werden
Fest codiert ist natürlich nur dann nützlich, wenn Sie sich auf einer festen Plattform befinden und Ihre Bildschirmkoordinaten im Voraus kennen oder wenn Sie bereit sind, Bildschirmlayouts für jeden möglichen Satz von Bildschirmabmessungen zu erstellen.
Normalisierte Koordinaten sind nett, leiden jedoch unter Mehrdeutigkeiten, wenn das Seitenverhältnis des Bildschirms nicht festgelegt ist (z. B. 0,75 wird auf eine andere physische Koordinate abgebildet, wenn im Breitbildmodus ausgeführt wird als in 4: 3). Für die Autoren ist es auch sehr unerklärlich, ein UI-Element als (0,2 x 0,2) zu deklarieren, nur um festzustellen, dass es beim Rendern nicht wirklich quadratisch ist.
Virtuelle Koordinaten sind eindeutig, weisen jedoch die gleichen Probleme auf wie normalisierte Koordinaten in der Remapping-Phase: Eine winzige Abweichung von der Dezimalzahl kann zu Fehlern führen, die dazu führen, dass UI-Elemente, die jetzt gekachelt werden sollen, über eine Naht verfügen.
Wenn Sie über einen Bildschirm mit fester Auflösung verfügen, bedeutet dies, dass es sowohl bei normalisierten als auch bei virtuellen Koordinaten sehr schwierig ist, eine 1: 1-Zuordnung zwischen den fein gestalteten Pixeln Ihres Künstlers im Bild der Benutzeroberfläche und den Pixeln auf dem Bildschirm zu gewährleisten Böse Skalierungsartefakte (vorausgesetzt, Sie rendern als strukturierte Quads auf dem Bildschirm).
Wir haben uns für die virtuelle Koordinierung entschieden, um Unklarheiten in Bezug auf das Seitenverhältnis zu vermeiden. Wenn Sie also auf einem 16:10-Bildschirm rendern, ist der UI-Bereich (0,0) -> (1600,1000), aber wenn Sie auf 4: 3 rendern, ist der nutzbare UI-Bereich tatsächlich (133,0) -> (1467) , 0).
Gibt es bessere Lösungen, die mir einfach nicht bekannt sind? Gibt es gute Strategien, um die Probleme dieser drei Ansätze zu minimieren?