Programmieren auf verschiedenen Bildschirmauflösungen

Anfängerfragen zum Programmieren mit PureBasic.
RolandIV
Beiträge: 28
Registriert: 11.09.2004 13:33

Programmieren auf verschiedenen Bildschirmauflösungen

Beitrag 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?
PB-Version: 3.90
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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 ;)
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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, ...).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
RolandIV
Beiträge: 28
Registriert: 11.09.2004 13:33

Beitrag 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.
PB-Version: 3.90
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Wenn Du keine fremde Lib benutzt sondern es selbst in die Hand nehmen willst, wird Dir aber nix anderes übrig bleiben.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Antworten