Drawimagerect an Auflösung anpassen(GUI)

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Infected

Betreff: Drawimagerect an Auflösung anpassen(GUI)

BeitragSo, Nov 18, 2012 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo blitzforum.de-Gemeinde! Bisher hab ich hier immer nur mit gelesen, aber jetzt wollte ich einfach mal eine Frage stellen. Smile

Ausgangssituation
Ich arbeite momentan an einem 2D Mapeditor, aber hänge grad etwas fest.
Ich möchte, dass sie Auflösung verstellbar ist, erstmal kein Problem. Ich habe die GUI in der maximalen Auflösung erstellt, also dass diese genau auf die max Auflösung ausgelegt ist.
Mit Drawimagerect kann man ja entscheiden in welcher Größe ein Bild gezeichnet wird.

Meine Frage
Gibt es eine Formel, mit der man berechnen kann in welcher größer die einzelnen GUI-Objekte gezeichnet werden müssen? Also quasi sowas wie

gui_teil_w = screen_width / XYZ
gui_teil_Y = screen_width / XYZ

drawimagerect(gui_teil,gui_teil_x,gui_teil_y,gui_teil_w,gui_teil_h)

Vielleicht hat ja jemand eine Lösung für mich parat, würde mich freuen Smile

ZEVS

BeitragSo, Nov 18, 2012 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfache Lösung: Virtual Resolution (der Befehl lautet SetVirtualResolution).
Antwort auf deine Frage: Nehmen wir einmal an, die maximale Auflösung hat die Dimensionen max_width und max_height. In diesem Falle ist das GUI-Objekt an der Position x|y, hat die Breite width und die Höhe height. Die letzendlichen Bildschirmgrößen sind proportional zur Bildschirmauflösung, d.h., in der Auflösung screen_width/screen_height berechnest du die Werte, indem du die Ursprungswerte x, y, width, height mit der neuen Auflösung multiplizierst und durch die alte teilst:
BlitzMax: [AUSKLAPPEN]
DrawImageRect(img, x*screen_width/max_width, y*screen_height/max_height, width*screen_width/max_width, height*screen_height/max_height) 

Oder anders ausgedrückt: In der Formel Zitat:
gui_teil_w = screen_width / XYZ
gilt: XYZ = max_width/width.

ZEVS
 

Infected

BeitragSo, Nov 18, 2012 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die schnelle Antwort! Ich werds heute gleich mal umsetzen, und dann Bericht erstatten Smile
 

Infected

BeitragSo, Nov 18, 2012 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Also so richtig funktioniert es noch nicht...

Ich nehm mal als beispiel die Minimapumrandung
Die Bilddatei ist 324x329, die aktuelle auflösung(1024x768) ist in den variablen screen_w und screen_h gespeichert, 1600x1200 ist die maximale vom editor unterstützte auflösung...

DrawImageRect(gui_minimap_l,0,0,(324*screen_w)/1600,(329*screen_h)/1200)



hier mal 2 Bilder, Resultat und Erwartung:


Resultat
user posted image


Erwartung
user posted image


Irgendwie denk ich irgendwas falsch...
 

Infected

BeitragMo, Nov 19, 2012 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab ein wenig rumprobiert, dabei ist mir aufgefallen, dass
local test:Float
test = 1024/1600

immer 0 ergibt, woran liegt das? Bin ich auf beiden Augen blind?

kog

BeitragMo, Nov 19, 2012 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst Fixe zahlen auch als Floats schreiben, ansonsten sind Integer gemeint:
Code: [AUSKLAPPEN]
local test:Float
test = 1024.0/1600.0
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge
GPU: HIS HD 4870 1GB GDDR5
RAM: 4x 4GB DDR3-SDRAM Dual Channel

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group