GUI-Werte an Auflösung anpassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • GUI-Werte an Auflösung anpassen

    Hallo Community,
    Ich habe des öfteren in anderen Beiträgen diese Frage gestellt, aber keine Antwort erhalten.
    Deshalb frage ich hier:
    Wie bekomme ich die GUI-Werte, damit ein GUI in jeder Auflösung gleich ist?
    Ich habe aus anderen Posts herauslesen können, dass das eine Prozentrechnung ist.
    Wie das gemeint ist verstehe ich bis heute nicht :D
    Also ich meine ich mache ein GUI in der Auflösung 1900x1600.
    Was muss man nun genau rechnen um den Wert zu bekommen?
    Ich meine man muss so rechnen:

    LUA-Quellcode

    1. sx, sy = guiGetScreenSize()
    2. dxDraw ( sx-sx*Wert, sy-sy*Wert, ... )

    So, diesen "Wert" brauche ich.

    Wäre nett wenn mir da jemand auf die Sprünge helfen könnte.
    Wenn ich mich irgendwo in der Rechnung irre, verbessert mich :)

    mfg
  • An einem Beispiel:
    Du hast ein Label mit der Breite 192 und der Höhe 160.
    Nun rechnest du aus wie viel Prozent das DEINER Auflösung entspricht.

    Das machst du mit Pw/PG = P% oder anders ausgedrückt Prozentwert/Grundwert = Prozentsatz
    192/1920 = 0.1
    160/1600 = 0.1

    Und das ist der Wert.
    Sie werfen Steine auf meinen Thron - Doch sie kriegen diese Krone nicht!
    Krone | Futurama | Das Urteil

    Folgt

  • Wobei ich sowas i. d. R. nicht empfehle.
    Versuch deine Elemente in der Laufzeit dynamisch zu aktualisieren.
    Behalte immer im Hinterkopf:
    - wer ist links neben dem Steuerelement
    - wer ist rechts neben dem Steuerelement
    - wer ist über dem Steuerelement
    - wer ist unter dem Steuerelement
    ..sowie kleinere Berechnungen, welche anwendungsspezifisch sind.
    ~ Signatur in Bearbeitung ~
  • Du möchtest doch bei jeder Auflösung die gleiche prozentuale Größe, sodass sich die Elemente weder überlappen, noch zu klein/zu groß sind.
    Dazu sagen wir, dass das Element auf DEINEM Bildschirm 192 Pixel Breite beträgt. Das entspricht 0.1 bzw. 10%.
    Nun wollen wir, dass es auch 10% von dem Bildschirm des ANDEREN bedeckt.

    Dazu rechnen wir erstmal den Prozentsatz aus.
    AbsoluteBreite/AbsoluteBildschirmbreite = Wert
    192/1920 = 0.1

    Nun wollen wir diesen Wert mit der Bildschirmauflösung des ANDEREN multiplizieren, um nur tatsächlich 10 Prozent zu bedecken.
    sx * Wert = width
    sx * 0.1 = width -> Bei einer Bildschirmauflösung von 1024 wäre width dementsprechend 102.4.

    Das kannst du gerne mit dem Dreisatz überprüfen:
    1920 -> 192
    1 -> 0.1
    1024 -> 102.4

    Allgemein:
    seineWidth = seineScreenwidth * deineWidth / deineScreenwidth
    Sie werfen Steine auf meinen Thron - Doch sie kriegen diese Krone nicht!
    Krone | Futurama | Das Urteil

    Folgt

  • Also ich mach das so:

    LUA-Quellcode

    1. guiCreateWindow(screenwidth/2-200/2, screenheight/2-300/2,200,300,"Titel",false)
    2. guiCreateWindow(screenwidth/2-Breite/2, screenheight/2-Länge/2,Breite,Länge,"Titel",false)


    So ist es in der Mitte und so lang und breit, wie du es erstellt hast. Du musst ausserdem beachten, dass die Standard-Schriftarten nicht grösser werden bei höheren Auflösungen (so habe ich es in Erinnerung). Daher arbeite ich nicht mit absoluten Grössen, sondern mache es so, dass die GUI's bei jedem User die selbe Grösse hat. In meinem Beispiel also 200/300 Pixel.

    Wenn du willst, dass das GUI bei jeder Auflösung genau gleich viel % des Bildschirms abdeckt, kannst du einfach absolute Werte verwenden:

    LUA-Quellcode

    1. guiCreateWindow ( 0.5, 0.5, 0.4, 0.6, "Titel", true )
    2. guiCreateWindow ( 0.5, 0.5, BreiteAbsolut, LängeAbsolut, "Titel", true )


    Die ersten beiden 0.5 bestimmen, dass das Fenster in der Mitte des Bildschirms auftaucht. Wenn du das nicht möchtest, musst du für diesen Wert die selbe Rechnung wie unten machen.

    Hier ist es so:

    BreiteAbsolut = PixelangabeBreite/DeineAuflösungBreite
    LängeAbsolut = PixelangabeLänge/DeineAuflösungLänge

    Bei 1920/1600:
    BreiteAbsolut = 200/1920 = 0.1042
    LängeAbsolut = 300/1600 = 0.1875

    LUA-Quellcode

    1. guiCreateWindow ( 0.5, 0.5, 0.1042, 0.1875, "Titel", true )
    Los Angeles Reallife: 27.09.2011 - 21.09.2013 †, begraben am 26.12.2013


    LA-Reallife Downloadlink: HIER KLICKEN

    Das LA-Reallife Skript findest du hier.
    Fragen zum Skript kannst du hier stellen.
  • xDWeediDx schrieb:

    Ja okay, aber dann ist das Fenster/Bild ja bei kleineren Auflösungen größer als bei höheren.
    Genau das will ich nicht, sondern es soll ja überall die selben % anzeigen. :)
    Ich habs jetzt hinbekommen, mit dieser Rechnung:

    LUA-Quellcode

    1. local sx, sy = guiGetScreenSize()
    2. dxDrawImage ( sx*PosX/1920, sy*PosY/1600, sx*Höhe/1920, sy*Breite/1600,... )

    Mit absoluten Werten wird dieses Problem gelöst. Mit dieser Rechnung rechnest du den absoluten Wert aus.
    Das Problem mit diesen Werten ist nur, dass wenn die verschiedenen Auflösungen nicht proportional zueinander stehen, dass Fenster verzerrt wird.
    Los Angeles Reallife: 27.09.2011 - 21.09.2013 †, begraben am 26.12.2013


    LA-Reallife Downloadlink: HIER KLICKEN

    Das LA-Reallife Skript findest du hier.
    Fragen zum Skript kannst du hier stellen.
  • Im GUI-Editor ist "Absolut" ja schon standardmäßig angehackt.
    Als ich das aber ohne diese Rechnung machte, hat man bei niedrigeren Auflösungen nur Teile gesehen.
    Die oben genannte Rechnung funktionierte auch einwandfrei in der 800x600 Auflösung.

    Oder ich verstehe irgendwas an dem Editor nicht :D
    Dann würde ich mir sehr viel Schreibarbeit sparen.

    mfg
  • xDWeediDx schrieb:

    Im GUI-Editor ist "Absolut" ja schon standardmäßig angehackt.
    Als ich das aber ohne diese Rechnung machte, hat man bei niedrigeren Auflösungen nur Teile gesehen.
    Die oben genannte Rechnung funktionierte auch einwandfrei in der 800x600 Auflösung.

    Oder ich verstehe irgendwas an dem Editor nicht :D
    Dann würde ich mir sehr viel Schreibarbeit sparen.

    mfg

    Ja, weil bei niedrigeren Auflösungen das Fenster ja noch kleiner gemacht wird. Wenn du dann das Fenster bereits ganz knapp gemacht hast, wird es dann zu klein. Da die Schriftgrösse aber nicht kleiner wird, gibt es dann das Problem mit dem Überschneiden usw. Daher verwende ich immer die selbe Grösse, egal welche Auflösung vorhanden ist. Somit ist immer alles lesbar und es wird nichts zerquetscht.
    Los Angeles Reallife: 27.09.2011 - 21.09.2013 †, begraben am 26.12.2013


    LA-Reallife Downloadlink: HIER KLICKEN

    Das LA-Reallife Skript findest du hier.
    Fragen zum Skript kannst du hier stellen.
  • @xDWeediDx:
    Sehr gut :)
    Du kannst dir auch mit dieser Rechnung sehr viel Schreibarbeit sparen.

    Erstelle deine Sachen standardmäßig über den GUI-Editor und erstelle dir doch einfach eine Funktion, die das für dich automatisiert.
    Sprich irgendwas wie: adjustWindowSizeAndPosition(guiElement)
    Dazu nutzt du einfach guiSetSize/guiSetPosition
    Sie werfen Steine auf meinen Thron - Doch sie kriegen diese Krone nicht!
    Krone | Futurama | Das Urteil

    Folgt