Mein immerwehrender Kampf mit Widgets. Tabelle richtig darstellen.

  • Hallo zusammen.


    Nichts kostet mich ja immer mehr Nerven, als das Erstellen von einem Widget. Zumindest immer dann, wenn ich vom Gamedesign der üblichen Verdächtigen etwas abweichen möchte.


    Und zwar gestaltet sich mein Problem wie folgt. Ich möchte eine geordnete Tabelle mit Statusinformationen des Spielers anzeigen. Die Tabelle soll in etwa wie folgt aussehen, auch wenn das Beispiel keinen Anspruch auf Vollständigkeit hat.



    Also, das Ganze besteht jetzt natürlich aus Platzhaltern, in einer Exceltabelle erstellt, ohne Grafiken oder so.


    Luckbotton soll zum Beispiel eine dreistufige Checkbox werden, Str, Dex,Int, HP, usw. werden dann durch ein grafisches Symbol ersetzt, während jeweils Current und Max halt darstellen, was der Spieler an Maximum ertragen kann und was aktuell ist, natürlich als Zahlenwerte.


    Das Ganze muss natürlich scalierbar sein und seine Form und alles behalten.


    Jetzt habe ich folgende Probleme. Text ist nicht so einfach skalierbar, weswegen ich ihn kurzerhand in eine Scalebox gepackt habe.


    Ansonsten habe ich halt mit den üblichen Werkzeugen gearbeitet, Canvas-Panel, wobwi ich Grid usw. ebenfalls auch ausprobiert habe, viel mit Horizontal und Vertical Boxen usw,


    Aber immer habe ich folgende Probleme. Einmal konnte ich Textsize auf 1 stellen und die Schrift ging trotzdem über den halben Bildschirm. Dann passiert es oft, dass die einzelnen Container bei Größenänderung einfach überlagern. Mal abgesehen davon, dass die tabellarische Formatierung immer wieder flöten geht und alles relativ ungeordnet dargestellt wird.


    Ich würde ja gerne auch einen Strukturbaum meines Widgets zeigen, allerdings habe ich den momentan aus Frust nach diversen Tests gelöscht.


    Kennt sich jemand von euch gut genug mit Widgets aus, um mir mal zu erklären, wie man eine Tabelle sauber darstellt, oder kennt vielleicht jemand ein Tutorial welches mein Tabellenproblem vielleicht etwas spezieller behandelt oder so? Ich habe natürlich schon einige Tutorials usw. gesehen, aber das Übliche hilft mir wie gesagt nicht so wirklich weiter.

  • Das mit den Widgets und der Skalierung + sonstiges ist tatsächlich jedes mal ein Graus.


    Ich hoffe das Bild hier hilft dir vielleicht weiter, im Grunde ist es sehr ähnlich deinem Muster, nur eben separiert und mit diversen Abständen gemacht. Mache meine ganzen Widgets fast alle nach diesem Prinzip, weil ich damit sehr flexibel alles einstellen und zusammenbauen kann + beliebige Erweiterung in jede Richtung (WICHTIG: Vertikal oder Horzitonal Box in sich setzen um Zugang zu den 4 Himmelsrichtungen zu erhalten!).


    in 90% aller Fälle entferne ich immer den Canvaspanel.
    Die ScaleBox so wie SizeBox direkt hintereinander wie auf dem Bild dann passt sich alles in diesem Inhalt immer an den verfügbaren Platz an.
    Danach die Hauptbox in diesem kommen alle weiteren "Dinger" hinein.
    Somit kannst du alles beliebig setzen, brauchst du unter der Hauptbox noch etwas, dann kannst du das einfach unter die Hauptbox setzen (da vertikal usw. usw.).


  • Ja, so ähnlich hat es bei mir nun auch geklappt. Hat auch nur bis heute Morgen um 6 Uhr gedauert. Danke dir. Ein paar Spacer könnte ich vielleicht noch reinpacken, das ist vielleicht nicht die schlechteste Idee.


    Aber der Baum, der das Widget beschreibt, sieht irgendwie so elendig falsch aus. Ich habe immer das Gefühl, dass das nicht so richtig sein kann. Und ganz ehrlich, ich habe schon tierisch Schiss, das Teil irgendwie zu erweitern.

  • Deswegen mache ich häufig:
    Vertikal Box

    -> Horizontal Box

    --> Vertikal Box

    --- > Inhalt

    Weil ich dann jedes Element einfach und bequem in jede Richtung erweitern kann.


    Mich regt das tierisch auf das bei jeder Veränderung alle Elemente in der Hierarchie automatisch geöffnet werden :(

    Da weiss ich häufig nicht mehr wo ich gerade war/bin, kann man das ausstellen das alles automatisch wieder aufgeklappt wird?

  • -> Horizontal Box

    --> Vertikal Box

    --- > Inhalt

    Ja klar, das mache ich natürlich auch. Allerdings skaliert sich die Textgröße noch immer nicht. Das ist bei mir schon oft ein großes Problem gewesen. Wenn man dann ein komplexeres Konstrukt von Widget ein wenig der Größe anpassen muss, dann geht man immer alle Textboxen durch und macht den Font einen Punkt kleiner, größer oder was auch gerade sein muss.


    Als bei C# WPF, MVVM und XAML für die Oberflächengestaltung eingeführt wurde, hatte ich zuerst auch so meine Probleme. Inzwischen würde ich mir etwas Ähnliches auch für die Widgetprogrammierung wünschen.


    Wenn ich mir den Baum links so anschaue, er sieht einfach immer unsauber und entsprechend unübersichtlich aus.


    Ich meine, so ungefähr, wie ich es jetzt habe, sollte es auch aussehen.



    Die Baumstruktur dazu, und ich denke mal, es ist ja nun nichts, was einen jetzt von den Socken haut, kriege ich nicht einmal mehr auf einen einzigen Screenshot.


    Wobei ich die Scelaboxen allerdings noch nachträglich eingefügt habe, weil in der Version, die optisch gar nicht funktionierte, skalierte sich der Text dann wenigstens bei Größenänderung automatisch. Hier passiert nichts, sie sind also absolut wirkungslos. Allerdings habe ich auch keine Lust sie jetzt wieder rauszuholen, weil alles, was innerhalb der Scalebox in der Hirarchie unterhalb ist, müsste ich dann ja auch wieder hin und her schieben.


    Wie ich schon einmal erwähnt habe, ich würde es sehr wünschenswert finden, wenn Epic das ganze noch einmal gründlich vom System her überarbeiten würde.

  • Wrap Text habe ich noch nicht ausprobiert, benötigte ich bisher halt nicht.


    Aber das sollte doch eigentlich in der Engine funktionieren. Ich meine, was ist Textwrapping denn? Wort geht über Rand, suche das vorherige Leerzeichen und gehe an der Stelle in die neue Zeile.


    Wenn das nicht richtig funktioniert, dann wäre das für mich der Beweis, dass Epic die Widgets mehr als nur stiefmütterlich behandelt, dass die da irgendetwas hin gekloppt haben, weil braucht man ja, aber dann auch nicht besondere Mühe in die Umsetzung gesteckt, Hauptsache ist halt da.

  • Ja, wie gesagt, habe ich noch nicht benötigt.


    Aber wenn dem so ist, dann ist das wirklich extrem stiefmütterlich in der Engine verankert. Wobei das grundsätzlich natürlich auch mit meinem Problem zusammenhängen kann, denn mit der Fontgröße kommen Widgets ja auch nicht so wirklich klar, zumindest wenn es um das Skalieren geht.


    Ich weiß nicht so recht, aber das Problem wird ja wohl schon extrem lange bestehen, deswegen wird das wohl bereits mehrfach an Epic gemeldet worden sein. Workarounds sind ja auch keine Dauerlösung. Von daher kann ich nur wiederholen, dass Epic das gesamte Widgetkonzept vielleicht doch einmal grundlegend überarbeiten sollte.


    Selbst wenn man es mit XAML wie in Blend umsetzt, wobei man XAML ja auch theoretisch sehr gut in einer grafischen Programmiersprache umsetzen könnte, nur halt nicht unbedingt in der Form von Nodes, irgendwie wäre alles besser als das, was es jetzt so darstellt. Natürlich nicht in allen Punkten, weil so Shooter HUDs usw, das geht ja relativ gut, ich denke halt, dass darauf das Hauptaugenmerk lag, aber bei allem, was darüber hinausgeht, wird es halt schon schwierig.


    Ich meine, OK, ich habe auch noch einen Shooter in meiner Pipeline, den ich eigentlich momentan ruhen lasse, um neue Ideen zu entwickeln, aber selbst wenn ich mich dem jetzt wieder zuwende, wird sich wohl kaum in nächster Zeit etwas ändern.

  • Im Grunde weiss die Engine eben nicht wann das Ende (Zeilenumbruch) erreicht ist.

    Daher Auto-Wraptext.

    Eigentlich müsste man es aber herausbekommen, ein Text der über den vorgegebenen Bereich hinaus geht, einfach an dem Leerzeichen davor umbrechen. Zumindest theoretisch sollte das möglich sein, zumindest intern von der Engine.


    Naja, diese Widgets sind echt nicht so toll eingebaut, hoffentlich wird das in UE5 besser.

    Ich befürchte nicht. Bisher habe ich da zumindest bei der 5 noch nichts mitbekommen. Bisher fühlt es sich relativ gleich an. Wobei, so lange wie das nächste Update auf sich warten lässt, seit EA 2, kann es natürlich dann doch sein, dass sie da gewaltig noch einiges am rumschrauben sind.

  • Dadurch das man hin und wieder in der ganze Thematik ein "Scale Box" verbaut, kann das auch beim Text oder bei den Elementen durcheinander kommen.


    Ich hoffe das ich endlich bald den Umstieg von UE4 auf UE5 mit meinem Projekt machen kann. Warte da schon die ganze Zeit drauf.


    Hätte da noch eine andere Kleinigkeit die ich hier gerne einwerfen würde, da es recht gut zu dem Thema passt.

    Es bezieht sich auf eine Scrollbox mit Inhalt.

    Wie kann man das machen das eine vertikale Scrollbox mit z.B. 4 Teilen Horizontal bestückt wird und erst dann in die nächste Spalte wandert?

    Bisher wird alles nur in eine Reihe gemacht :(

  • Indem man eine Horizontal Box in die Vertical packt und die "Teile" in der Horizontalen platziert :)

    Und wo gebe ich die Stückzahl an die Horizontal maximal eingefügt wird?

    Irgendwie kann ich dem so nicht ganz folgen.


    Egal wie ich das platziere es ist immer nicht so wie es sein soll.

    Muss ich dafür irgendwie ein spezielles Array mit 4 Limitierungen setzen oder so?



    Die Widget Elemente sind:
    Horizontal Box -> Vertical Box -> Inhalt

    Die werden in die ScrollBox eingelesen die vertical verläuft.


    Zusätzlich habe ich das Problem das mein Widget welches ich über Event Hover über den Button aufrufe, flackert. Also an/aus geht.


    Ich weiss nicht warum das so ist.

    Vor dem oberen Eingang befindet sich nur das einlesen der Datenbank (Datatable).

  • Spontan würde ich wie folgt vorgehen. Irgendwo hast du doch bestimmt ein For Each Loop zum Auslesen aller Elemente, die angezeigt werden sollen. Hinter dem klemmst du dann halt einen Zähler, der bis zur gewünschten Anzahl der Einträge untereinander zählt und wenn er die erreicht hat, wird eine neue Vertical Box eingefügt und weiter geht es.

  • Kleiner Nachtrag. Mir ist da gerade mein Tutorial eingefallen, welches ich vor einiger Zeit mal hochgeladen habe für Nachrichten, Chat usw.


    Nachricht- / Information- / Chatanzeige (HUD) ohne komplizierte Indexsortierung


    Es trifft zwar nicht genau dein Problem, logisch, aber einige Teile davon dürften auf dein Anliegen anwendbar sein, mit etwas Anpassung. Zumindest ist enthalten, wie du etwas in die Vertikal-/ Horizontalbox zur Laufzeit einfügst. So ähnlich müsste es auch bei dir funktionieren.


    Leider werden die Bilder nicht mehr direkt angezeigt, seitdem Sleepy auf die Tutorialseite umgestellt hat, das macht es nicht einfacher, aber sie funktionieren noch, wenn du darauf klickst.

    • Offizieller Beitrag

    Dafür ist die Grid da. Ein Grid in der Scrollbox.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Sie macht das leider nicht automatisch, deswegen muss man ein Objekt genau sagen wo es hin soll.

  • So habe die perfekte Lösung gefunden und das ist total einfach zu machen.


    1. SizeBox und darin eine ScrollBox (in beliebige Richtung, ebenso wie man es haben will).

    2. WrapBox in die Scrollbox

    3. Die Höhe und Breite davon entsprechend anpassen (siehe SizeBox)!

    4. Das Widget das darin hinzugefügt werden soll, in eine HorizontaleBox packen.

    5. Den gewünschten Inhalt in dem Widget in der HorizontalBox beliebig gestalten.

    6. Alles weitere wird automatisch erledigt.


    Also so einfach habe ich mir das nicht vorgestellt!