Viewgröße für Auflösung anpassen

  • GM 8
  • Viewgröße für Auflösung anpassen

    Guten Abend meine Herren,

    erneut komme ich mit einem Problem angetanzt:
    Da mein Spiel ausschließlich im Vollbildmodus stattfinden soll, ich aber verzerrte Pixel vermeiden möchte, möchte ich möchte die Größe meines Views (bzw. Raums im Hauptmenü) an die Auflösung des Bildschirms anpassen.
    Das mache ich, indem ich eine Mindest- und eine Maximalgröße sowie einen Skalierungsfaktor festlege. Außerdem lege ich fest, dass das Viewseitenverhältnis 3:2 sein soll. Ist das Seitenverhältnis des Computerbildschirms nun breiter als 3:2, zum Beispiel 1366x768, teile ich die Höhe des Bildschirms zuerst durch 1 und frage ab, ob das Ergebnis in meinem festgelegten Maximal-/Minimalbereich liegt. Wenn nicht, teile ich es durch zwei und frage erneut ab; wenn es da auch nicht reinpasst, teile ich die Höhe durch 3 usw. Ist das Seitenverhältnis schmaler als 3:2, also z.B. 1024x768, mache ich dasselbe mit der Breite des Bildschrims. So bestimme ich die Idealgröße für mein View. Gecodet sieht das so aus:
    Spoiler anzeigen

    GML-Quellcode

    1. //structure: resolution_adapt(relw,relh,maxw,minw,maxscale);{
    2. var relw, relh, maxw, maxh, minw, minh, maxscale, disw, dish, scaletest, width, height, scale;relw=argument0;relh=argument1;maxw=argument2;maxh=maxw/relw*relh;minw=argument3;minh=minw/relw*relh;maxscale=argument4;disw=display_get_width();dish=display_get_height();scaletest=1;width=576;height=384;scale=1;
    3. repeat (maxscale)
    4. {if (disw/dish>=relw/relh) if (dish/scaletest>=minh && dish/scaletest<=maxh) { width=height/relh*relw; scale=scaletest; height=dish/scaletest; }
    5. if (disw/dish<relw/relh) if (disw/scaletest>=minw && disw/scaletest<=maxw) { width=disw/scaletest; height=width/relw*relh; scale=scaletest; }
    6. scaletest+=1;}
    7. }

    Am Ende stehe ich nun also mit drei Variablen da: der Breite (width), der Höhe (height), und dem Skalierungsfaktor (scale).
    Und die berechnet er auch genauso, wie ich es von ihm will. Mein Problem liegt nur dabei, die Viewgröße auch dementsprechend anzupassen! Ich habe alle möglichen Befehle versucht, aber ich bekomme es einfach beim besten Willen nicht hin! ;(

    Ich hoffe, ihr könnt mir helfen, GM-D!
  • Ich verstehe zwar nicht ganz, warum du das Berechnen so umständlich machst,
    aber hier eine Möglichkeit die Größe der Views und die Größe der Ports während des Spiels zuverändern.
    Mach den Größencheck und trage die Daten für jeden Raum im Spiel mit dem Befehl
    room_set_view(ind,vind,vis,xview,yview,wview,hview,xport,yport,wport,hport,hborder,vborder,hspeed,vspeed,obj)ein. Zudem musst du beachten, dass du in jedem Raum Views aktivierst.
    Entweder im GM selbst oder mit room_set_view_enabled(ind,val)
    Außerdem ist es wichtig, dass du das alles in einem extrigen Raum vor Spielbeginn machst,
    da man den View und den Port des aktuellen Raumes ohne Neustart nicht verändern kann.
  • Ich hatte es zwar bereits mit room_set_view versucht, aber habe nicht begriffen, dass ich es festlegen muss, bevor ich in den Raum wechsle. Ich habe nun als ersten raum einen rm_resolution erstellt und dort für alle Räume die Größen eingestellt, und nun klappt es auch. Vielen dank, Shapow, du hast mir wirklich geholfen!
  • Benutzer online 1

    1 Besucher