Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

09.12.2013, 10:06

Zitat von »BlueCobold«

Zitat von »Endgegner«

Aber das passiert hier nicht: Stattdessen wird das Widget so ausgerichtet, dass sein Mittelpunkt auf dem rechten Rand des Parents liegt.

Das wiederum hätte ich nicht erwartet.

Das war auch missverständlich von mir ausgedrückt, weil hinter "das passiert hier nicht" die Begründung fehlt. Mir ging es bloß darum, dass align="right" nicht äquivalent mit align="left" margin-left="100% - @50%" wäre. Aber das ist jetzt nebensächlich.


Zitat von »BlueCobold«

Parsing von Ausdrücken und das am Ende noch im Konstruktor, das sollte man meiner Meinung nach immer vermeiden, weil man dem Entwickler da wieder eine neue (wenn auch einfache) Syntax aufbrummt, die eben nicht sein muss.
Letztlich ist es Dein Ding, Du kannst tun und lassen, was Du willst. Ich hätte es trotzdem über align="right" xoffset="50%" gemacht. Alignment bezieht sich auf das Parent-Widget, Offset ist relativ dazu in Pixeln, wobei die Größe des Widgets in % genutzt werden kann. Ich denke, dass das jeder versteht.

Ja, das stimmt schon mit der Syntax.
Wenn man davon ausgeht, dass die Syntax nur aus Addition und Substraktion besteht, wäre es im Endeffekt sowieso nutzlos, wenn der Ausdruck mehrere Measure::self oder mehrere Measure::parent oder mehrere Measure::pixel enthielte. Jeder Measure-Typ wird höchstens ein einziges Mal im Ausdruck benötigt. Das bedeutet also auch, dass man diese drei Typen durchaus unabhängig voneinander festlegen könnte.

Mal rein interessehalber: Wie würdest du align="right" xoffset="50%" ändern, wenn du das Widget rechts neben dem Parent mit 10px Abstand platzieren wolltest? align="right" xoffset="100%" leftmargin="10px"?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

22

09.12.2013, 10:41

Ich würde Dir zu beidem raten. Sonst hast Du keine Möglichkeit ein Element immer z.B. 30 Pixel vom rechten Rand zu positionieren. Das geht nämlich nur mit der Kombination aus 100% - 30 Pixel.

Ich frage mich warum man das tun will, wenn man ein auflösungsunabhängiges GUI entwicklen will?

Für "Auflösungsunabhängig" gibt es 3 Möglichkeiten:
Die Oberfläche skaliert mit der sich ändernden Bildschirmgröße (Angaben wären für Höhen- und Breitenangaben immer abhängig von der Breite, Höhe oder Fläche/Diagonale des Bildschirms), die Oberfläche nimmt überall den gleichen absoluten Platz ein (in Zentimetern, Größen/Positionierungen ggf. prozentual) oder die Oberfläche nimmt den gleichen relativen Platz ein (in Pixeln, Größen/Positionierungen ggf. prozentual, "Auflösungsunabhängig" kommt hier durch Ausrichtungen und prozentuale Größen). Mit beiden Herangehensweisen lassen sich Oberflächen gestalten, die sich an die Auflösung und das Seitenverhältnis automatisch anpassen (auch wenn man bei beiden in bestimmten Fällen Probleme bekommen kann).
In diesem Fall scheint wohl das Ziel zu sein, dass die Oberflächenelemente überall den gleichen Platz einnehmen.

Ich persönlich würde in einem Spiel grundsätzlich ein Layout präferieren, welches unabhängig von der Auflösung den gleichen Platz auf dem Bildschirm einnimmt. Nachteile dabei können sein, dass man seine Oberfläche zu klein gestaltet bzw. einen zu großen Bildschirm voraussetzt, wodurch das gleiche Layout auf kleineren Bildschirmen schlechter zu erkennen ist.
Im Gegensatz dazu haben Angaben in Pixeln das Problem, dass entsprechende Elemente bei steigender Pixeldichte oder Abstand zum Bildschirm (Fernseher/Beamer) schlechter zu erkennen sind und Angaben in Zentimeter, dass das Layout bei zu kleinen Bildschirmen zerstört werden kann und dass man ebenfalls bei steigendem Abstand weniger erkennen kann.
Und das hatte jetzt nur bedingt mit dem eigentlichen Thema zu tun...


Zur Problematik mit den Berechnungen:
Ich finde es grundsätzlich auch besser, wenn derartige Definitionen gänzlich ohne Formeln in den Definitionen auskommen, allerdings kommt man immer mal wieder an Punkte, an denen es schwierig ist, entsprechende Definitionen zuzulassen. Ein Beispiel dafür wären relative Angaben. Beziehen sich diese auf die Größe des aktuellen Elements, des Elternelements oder des obersten Elements (dem Fenster/Bildschirm)?
Für den gegebenen Fall wurde ja bereits eine lösungsmöglichkeit gegeben (wobei ich eine Angabe, wie left="50%" oder right="-50%" besser finden würde. Eine andere Möglichkeit wäre es, am Element einen Bezugspunkt zusätzlich zur Ausrichtung zu setzen. Der Standard könnte sein, dass der Bezugspunkt immer der Ausrichtung entspricht und in diesem Fall könnte es mit center überschrieben werden, wodurch das Element ebenfalls an der gewünschten (wenn auch fragwürdigen) Stelle steht.


Nachtrag (habe wohl etwas langsam geschrieben):
Elemente nebeneinander platzieren: gleicher Parent mit entsprechendem LayoutManager/Typ
Wenn sie visuell nebeneinander liegen, dann sollten sie sehr wahrscheinlich nicht untereinander in der Hierarchie liegen. Wenn sich die Position automatisch aktualisieren soll, wenn der "Parent" verschoben wird: entweder gemeinsame Parent das, was tatsächlich verschoben wird oder es müsste eine entsprechende Abhängigkeit eingebaut werden.


Nachtrag 2 (ganz vergessen):
Bei der Layoutdefinition in Zentimetern wird dem Problem zu kleiner Bildschirme so entgegen gewirkt, dass für zu kleine Bildschirme ein anderes Layout verwendet wird. Auf Android wird dies meines Wissens grundsätzlich (bei regulären Apps, bei Spielen kann ich das nicht mit Sicherheit sagen) gemacht.

Zitat von »David Scherfgen«

Vielleicht um "Randgrafiken" für Fenster, Buttons etc. nicht mitzuskalieren. Das sieht ggf. ziemlich hässlich aus.
Bei den meisten Betriebssystemoberflächen sind ja auch die Fensterrahmen und die Buttons zum Minimieren, Maximieren und Schließen eines Fensters immer gleich groß, egal welche Auflösung man einstellt.

Dem Problem der Skalierung kann man entweder so entgehen, indem man mehrere Auflösungsstufen der gleichen Grafik verwendet oder indem man statt Rastergrafiken irgendeine Form von Vektorgrafiken o. ä. verwendet. Desktopicons beispielweise können auf Windows unterschiedliche (Pixel-)Größen haben, abhängig von den Einstellungen des Benutzers, und die Kacheln des Modern UI und deren Symbole richten sich nach der Bildschirmgröße (nicht nach der Auflösung).
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sacaldur« (09.12.2013, 10:58)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

23

09.12.2013, 11:40

Mal rein interessehalber: Wie würdest du align="right" xoffset="50%" ändern, wenn du das Widget rechts neben dem Parent mit 10px Abstand platzieren wolltest? align="right" xoffset="100%" leftmargin="10px"?

align="right" xoffset="-50%"

Ich frage mich warum man das tun will, wenn man ein auflösungsunabhängiges GUI entwicklen will?
Angenommen ich habe ein Icon, welches bei 1920x1080 am rechten Rand liegen soll, aber mit einem gewissen Abstand, damit es nicht so drangeklatscht wirkt. Z.B. die Skill-Buttons in WoW (oder in jedem anderen Game). Ohne %+Offset/Margin bekommt man es sonst nie hin, dass ein Element an der rechten Seite mit einem Abstand hängt. Wie auch?
Ein Spiel wird mit einer default-Auflösung entworfen und für die gelten die Pixel-Abstände. Dass kleinere oder andere Auflösungen das dann mal skalieren, das ist davon total unabhängig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

24

09.12.2013, 14:04

Ist das Problem aber nicht, dass ich beim Entwurf in Pixelabständen denke? Ich würde, wenn ich so eine Skillbar designen müßte, das ganze eher bspw. als 0,01 vom Rand angeben, also in einer genormten GUI-Fläche (bsp Breite ~1.7 Höhe 1.0 für 16/9) sozusagen. Diese genormte Fläche kann, dann letztendlich zur Laufzeit auf die jeweilige tatsächliche Auflösung transformiert werden. Bleibt das Problem mit dem Seitenverhältnis, dass man aber wohl nie los wird, wenn man unter einer bestimmten Annahme anfängt seine GUI zu designen.
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

25

09.12.2013, 14:12

Hö? Wieso denn? Die Elemente alignen sich doch einfach nur anders. Du kannst Dir ja mal Rickety Racquet (die spielbare Version) anschauen. Da werden die Text-Elemente oben am Rand genau so ausgerichtet. Sie werden nicht skaliert, sondern nur gelayoutet, aber da passende Skalierung mit rein zu packen wäre ja das geringste Problem und unabhängig von der Position. Ich sehe kein Problem darin beim Entwurf in Pixeln zu denken. Ich kann mir auch eine virtuelle Größe bauen, aber letztlich wird der Abstand ohnehin irgendwie festgelegt. Ob das nun 20 Pixel, 2 cm auf einem 96DPI-Bildschirm oder anderthalb Daumen sind, das ist doch egal. Ich kann Pixel skalieren und ich kann auch virtuelle Daumen skalieren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige