Fenster skalieren
Übersicht

Zwer99Betreff: Fenster skalieren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo!
Ich habe folgendes Problem: Mein Spiel läuft mit einer Auflösung von 1280 x 800, jedoch lässt sich das Spiel nicht auf einem Netbook starten, da die Auflösung zu hoch ist ![]() Ich kann jetzt nicht einfach alles um einen gewissen Wert herunterskalieren, da Objekte an fixe Positionen am Bildschirm platziert werden. Ich habe die Idee alle Positionen durch eine Funktion mit dem Skalierungsfaktor zu berechnen, aber das ist mir zu umständlich. Per Zufall habe ich bemerkt, dass, wenn ich meinen PC an einen Beamer hänge und dort die Auflösung auf 1280 x 800 stelle, den Laptop schließe, den Beamer ausstecke und dann den Laptop wieder öffne (also zurück zum Anmeldebildschirm) und die Auflösung wieder bei noch immer gestarteten Spiel wieder umstelle, plötzlich das Fenster des Spiels um den Faktor der Auflösungen vergrößert bzw. verkleinert wurde. Also muss es folglich eine Möglichkeit geben (wahrscheinlich mit der WinAPI) ein Fenster wirklich zu skalieren, ohne etwas im Programm ändern zu müssen. Leider habe ich von der WinAPI keine Ahnung. Es wäre nett, wenn mir jemand helfen könnte ![]() Dankeschön, Zwer99 |
||
1. Platz: BAC #126 BAC #60 | 2.Platz: BCC #36 | 3. Platz: BCC #18 | Pfurz: BCC #20
Ovion Entertainment |
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schau dir doch mal den Befehl SetVirtualResolution( width#,height# ) | ||
Logic Gui Professional a Gui Designer for MaxGui |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dazu noch ein kurzes Beispiel:
BlitzMax: [AUSKLAPPEN] SuperStrict Sicher, Du wirst einige Änderungen in deinem Code vornehmen müssen (z.B. MouseX() zu VirtualMouseX() abändern usw., falls Du das nicht wrappen lassen willst), aber im Endeffekt sollte das doch die sinnvollste Lösung für dein Problem sein. |
||
Zwer99 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hui!
Das ist schon ein ziemlich gutes Ergebnis und ich muss nicht einmal eine Änderung machen! Dankeschön! Nur leider scheint der Befehl das Fenster selbst nicht zu skalieren, wisst ihr, was ich meine? Aber auch wenn es keine andere Möglichkeit gibt, dann bin ich damit eigentlich schon ziemlich zufrieden ![]() |
||
1. Platz: BAC #126 BAC #60 | 2.Platz: BCC #36 | 3. Platz: BCC #18 | Pfurz: BCC #20
Ovion Entertainment |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
SetVirtualResolution ist die bessere Wahl für dich. Du musst halt einfach bei Graphics ein kleineres Fenster erstellen.
Ansonsten hast du Recht, man kann mittels WinAPI die Größe eines Fensters ändern. Der Befehl dazu lautet SetWindowPos. Allerdings ist dadurch das Bild nicht skalliert, sondern "verzehrt", bzw sieht es nicht so schön aus wie mit SetVirtualResolution. Deswegen würde ich dir von dieser Methode abraten. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Zwer99 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber ich könnte theoretisch folgendes machen:
Ich habe eine Auflösung von 1280 x 800. Alles ist auf diese Auflösung ausgelegt und ich möchte "kleinere" Auflösungen unterstützen. Also könnte ich mit SetVirtualResolution 1280*2, 800*2 auf ein Viertel reduzieren (so als Beispiel) und dann mit der WinAPI das Fenster verkleinern. Weil auf größeren Bildschirmen ist es doch egal, wenn man auf einem kleinen Bildschirm spielt ![]() @Eisvogel: Wie müsste ich das in BlitzMax genau eingeben, wenn ich auf die WinAPI zugreifen möchte? Weil ausprobieren wäre trotzdem nicht schlecht ![]() |
||
1. Platz: BAC #126 BAC #60 | 2.Platz: BCC #36 | 3. Platz: BCC #18 | Pfurz: BCC #20
Ovion Entertainment |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Setz halt die VirtualResolution auf die, die dein Code erwartet, und ändere die Tatsächliche des Fensters. Dann benutz du das system auch so, wie es gedacht ist. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einbinden eines Befehls aus der WinAPI erfolgt über einen Extern-Block nach dem folgenden Schema:
BlitzMax: [AUSKLAPPEN] Extern "Win32" Infos zu SetWindowPos findest du auf MSDN. Bedenke, dass du hier auch den Fensterrahmen und die Titelleiste bei der Skalierung berücksichtigen musst. Aber ich würde dir dringend empfehlen die BlitzMax eigene Skalierung zu nutzen, da sie besser ist. Dazu erstellst du einfach ein Grafik-Fenster in der Größe, die du haben willst und setzt die virtuelle Auflösung auf deine 1280*800. Das ist das einfachste und es ist Plattformunabhängig. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn mich nicht alles täuscht, könntest du trotzdem diverse probleme kriegen.
Nun, du hast 1280 x 800 als auflösung, auf die du dein Programm auslegst. Wenn nun jemand daher kommt und gerne zb 16:10 oder 4:3 als auflösung nutzen möchte, KÖNNTE das funktionieren. Schöner wäre es allerdings, wenn du solche geschichten mit einplanst, und - zumindest für jedes seitenverhältnis - ein Set zusammenprogrammierst. Wenn mich nicht alles irrt, musst du am ende nurnoch mit Graphics ein XYZ großes fenster erstellen und - je nach seitenverhältnis - die auflösung einstellen. Beispiel: Graphics 800,600 - SetVirtualResolution(1024, 768) Graphics 1920, 1080 - SetVirtualResolution(1280, 720) 'odersowas ![]() Graphics 1024, 768 - SetVirtualResolution(1024,768) Das heißt im klartext: Wähle eine auflösung, auf die du deine Seitenverhältnisse, die du unterstützen magst, trimmst - und egal welche auflösung eingestellt ist, setze die Virtuelle auflösung auf eben diese Optimierte variante. (wenn ich nicht ganz blöd bin, sollte es so funktionieren. Wichtig ist am ende nurnoch, das du zb Mousex() durch VirtualMouseX() ersetzt.) |
||
Zwer99 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jea!!!
Danke an alle! Es funktioniert alles wunderbar! Ich hätte wirklich nicht gedacht, dass es so einfach geht ![]() Blöder Denkfehler mit den Auflösungen von mir: Ist doch logisch, dass man das Fenster auf die gewünschte Größe einstellen muss ![]() Naja, jetzt funktionierts und ich bin froh darüber ![]() Thx, nochmal Zwer99 |
||
1. Platz: BAC #126 BAC #60 | 2.Platz: BCC #36 | 3. Platz: BCC #18 | Pfurz: BCC #20
Ovion Entertainment |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group