Seite 1 von 2
Programmieren auf verschiedenen Bildschirmauflösungen
Verfasst: 25.02.2007 12:17
von RolandIV
Ich möchte dem Benutzer ermöglichen ein Programm über verschiedene Bildschirmauflösungen auszuführen, z.b. ein Spiel. Wie können nun Buttons etc. relativ zueinander gleich plaziert werden?
Klar, man kann das alles relativ irgendwie plazieren, z.b. der erste Button ist bei ScreenWidth/15 der nächste bei ScreenWidth/13 oder so ^^ aber das ist doch irgendwie ziemlich umständlich. gibt es da eine bessere Möglichkeit für?
Verfasst: 25.02.2007 12:40
von DarkDragon
Ich hab das ganz einfach gelöst bei meinem Schulprojekt.
Es gibt 2 Auflösungen:
1. Generell Bildschirmauflösung(z.B. 1024x768)
2. 2D Bildschirmauflösung(z.B. 800x600)
Nun wird die 2. Auflösung im endeffekt auf den ganzen Bildschirm nachher projeziert. So kann ich auch auf AntiAliasing hoffen und generell sieht es wenn die 1. Auflösung 320x200 ist immernoch annehmbar aus.
In PB weiß ich nicht wie man es mit dem Screen regeln würde. Man müsste einen 2. screen vorgaukeln.
Verfasst: 25.02.2007 12:40
von #NULL
wenn du einzelne buttonleisten hast. z.b. eine links oben, eine an der unterkante ect., dann mußt du ja nicht unbedingt skalieren. es reicht dan ja auch, die ausgangskoordinaten für so einen bereich von den screen-/fenster-kanten abhängig zu machen.
macht aber nur sinn, wenn du nicht ein fenster voller knöppe benutzt, die über die ganze fläche verteilt sind.
Verfasst: 25.02.2007 13:36
von Kaeru Gaman
bei professionellen spielen sieht man das oft,
dass die bedienelemente eine feste größe in pixel haben,
dass nur der eigentliche game-screen größer oder kleiner wird.
die bedienelemente nehmen dann bei einer höheren auflösung eben weniger raum ein.
(das war ne ergänzung zu #NULL)
zu dem Vorschlag von Dede:
du hast die möglichkeit, einen windowedscreen über das
komplette fenster zu erstellen und mit autostretch zu versehen.
wenn du jetzt das fenster maximierst nimmt es die größe
des desktops an und damit tut dach auch der screen darin,
aber der wird gestretcht, rechnerisch hat er immer noch sein ursprüngliches format.
ABER
du scheinst eher in richtung Gadgets zu fragen.
bei den wenigsten spielen verwendet man wirklich Fensteroberflächen mit gadgets.
meistens verwendet man komplette spielfelder als screen,
bei dem die bedienelemente als sprites aufgebracht werden.
das liegt vor allem daran, dass die echten gadgets aufwendig manipuliert werden müssten,
um nicht in dem design zu erscheinen das der benutzer eingestellt hat.
da ist es einfacher, sie gleich innerhalb der screens zu implementieren.
man muss sowieso mausereignisse innerhalb der spieleoberfläche verarbeiten,
da ist man nicht drauf angewiesen, die ereignisse von gadgets zu verwenden.
Verfasst: 25.02.2007 14:18
von ZeHa
Ich hab mir damals zwei Funktionen programmiert, eine getWidth() und getHeight(), denen übergebe ich dann z.B. einfach immer die Größe, die für meine Auflösung gelten würde, also z.B. wenn ich 1024x768 benutze und getWidth(80) aufrufe, wird mir auch 80 wieder direkt zurückgegeben. Wenn allerdings mit einer anderen Auflösung gearbeitet wird, rechnet mir die Funktion das einfach kurz auf den korrekten Wert um.
Nun kannst Du sämtliche Gadgets plazieren und anstatt fixer Werte einfach kurz die entsprechenden Funktionen aufrufen. Natürlich kannst Du statt Proceduren auch Macros verwenden, wenn es extrem um Geschwindigkeit gehen sollte (bei normalen GUIs aber eher nicht der Fall).
Eine andere Möglichkeit, die rein vom Prinzip her gleich arbeitet, wäre einfach als Parameter die Größe in % anzugeben. Also z.B. getWidth(25) würde Dir dann einfach 25% der aktuellen X-Auflösung zurückgeben.
EDIT: Das "umständliche" was Du beschreibst, also ScreenWidth/15 usw. ist im Prinzip ja nichts anderes, aber umständlich ist es nur, wenn Du dauernd wirklich ScreenWidth/15 angeben mußt. Sobald das in zwei hübsche Funktionen verpackt ist, ist es total sauber und logisch, und überhaupt nicht mehr umständlich

Verfasst: 25.02.2007 14:21
von DarkDragon
Für Gadgets wäre da Pure_Resize oder sowas. Der WiDe kann auch Fensterlayouts, aber leider kommt der nicht vorran.
Mit Java gehts viel einfacher, da gibts ganz viele Layouts (FlowLayout, ...).
Verfasst: 25.02.2007 14:23
von RolandIV
nee also ich programmiere in dem gebiet gerade nichts, mit gadgets meinte ich beispielsweise buttons die selbst gemacht sind, also z.b. bilder.
es hat mich nur mal so interessiert wie das die professionellen entwickler immer lösen.
Verfasst: 25.02.2007 14:31
von ZeHa
Naja das Prinzip ist ja nicht anders. Ob Du da nun Gadgets benutzt oder Deine selbstgemachten Buttons in einem 2D-Screen plazieren willst, umrechnen mußt Du immer. Bei 3D wird quasi "automatisch" umgerechnet, also mal ganz salopp formuliert.
Verfasst: 25.02.2007 14:32
von DarkDragon
ZeHa hat geschrieben:Naja das Prinzip ist ja nicht anders. Ob Du da nun Gadgets benutzt oder Deine selbstgemachten Buttons in einem 2D-Screen plazieren willst, umrechnen mußt Du immer.
Nö, ich muss nichts umrechnen.
Verfasst: 25.02.2007 15:26
von ZeHa
Wenn Du keine fremde Lib benutzt sondern es selbst in die Hand nehmen willst, wird Dir aber nix anderes übrig bleiben.