Die Sache mit der Auflösung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Die Sache mit der Auflösung

      Mahlzeit,

      in meinem aktuellen Projekt ermittel ich zuerst die aktuelle Bildschirmauflösung, mache die view_wport und view_hport genauso groß, aber view_wview und view_hview mache ich nur genau ein viertel so groß.
      Dass mache ich so, da ich Vollbild ohne schwarze Ränder haben möchte aber eine schöne Pixeloptik, darum sind view_wview und view_hview nur 25% der Auflösung groß. Bei meiner Auflösung von 1920 x 1080 klappt das wunderbar.

      Nun könnte es aber folgenmde Probleme geben:
      1.) EIne der gängisten AUflösungen ist immer noch 1366 x 768, ein Freund von mir hat die und bei ihm lief ein SPiel von mir mal nicht, ich glaube auf Grund seiner Auflösung.
      Wenn man 1366 durch 4 teilt kommt 341,5 raus. Klar das könnte ich einfach aufrunden dann kommt 342 raus. Bei meiner AUflösung ist aber die Width des Views 480 Pixel breit.
      Diese Differtenz ist schon blöd, möchte ich doch dass alle Spieler die gleiche Sichtweite haben (ist ja nicht unwichtig z.b. im Kampf). Also könnte ich ja einfach eine konstante View Größe einstellen.
      Dann hab ich aber wieder schwarze Ränder oder die Proportionen stimmen nicht mehr.

      WIe würdet ihr da vorgehen? Wie macht man das normaler Weise? Habe erst zwei fertige Spiele. Darum nicht die Erfahrung damit. Im letzten Game hab ich einfach alles display_get_width() und height gemacht, ich hatte nämlich keinen View.

      2.) Problem: Angenommen ich mnach es doch so wie oben gesagt, und nehme in Kauf das die Sichtweite von Auflösung zu AUflösung unterschiedlich ist, was ist mit der application_surface?
      Wenn ich wieder 1366 x 768 als Bsp. nehme: ceil(1366 / 4) = 342, dass ist kein Vielfaches von 2. Aber Surfaces mögen doch Größen der Wurzel nicht durch 2 teilbar ist nicht so gern oder? Da könnte es doch wieder Kompatibilitätsprobleme geben oder?
      Wobei ich mich damit noch nicht ganz auskenne. Habe diese Frage ja erst im Surface Topic gefragt aber noch niemand hat geantwortet.

      Also wie machen? Jemand mit Erfahrung und WIssen ist gefragt. :)
    • Ich weis nicht ob ich das richtig verstanden habe, aber warum lässt du nicht einfach view_wview und hview immer auf dem selben Wert?
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • Orientiere dich nciht an der Breite sondern an der Höhe des Bildschirms und die Breite ist einfach nur der Wert mal 2 bei einem aspect ratio von 16:9, dann kann dir nurmehr etwas schiefgehen wenn du 16:10 Bildschirme hast. Wenn du aber den User im Optionsmenü zwischen 16:9 (Breite errechnet durch Höhe) und 16:10 oder sogar 4:3(Höhe errechnet durch Breite) einstellen lässt, gibts kein problem mehr :)

      Bei deinem Kumpel läuft das Spiel dann quasi in 192p und bei dir in 270p.

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    • @ husi012: Weil ich ja Vollbild ohne schwarze Balken haben möchte und die Proportionen auch stimmen sollten. Wenn ich dem View eine feste Größe gebe, z.B. 1024 x 768 dann ist der View 4:3 wird aber z.B. auf 16:9 gestreckt und das sieht kacke aus.

      @ Aku_ryou: Ich will aber nicht das der Spieler das einstellen muss, geht ja bei anderen Spielen auch automatisch. Ist mir grad zu hoch aber könnte das so aussehen:

      GML-Quellcode

      1. w = display_get_width();
      2. h = display_get_height();
      3. if h / w = 0.75 ratio = "4:3"
      4. else if w / h = 1.78 ratio = "16:9"
      5. else ratio = "16:10";


      soweit so gut, jetzt hab ich die Verhältnisse ermittelt. Und dann? Sowas hier?

      GML-Quellcode

      1. view_wport = w;
      2. view_hport = h;
      3. if ratio = "4:3" {
      4. view_wview = w / 4;
      5. view_hview = h / 3:
      6. }
      7. if ratio = "16:9" {
      8. view_wview = w / (16 / 4);
      9. view_hview = h / (9 / 4);
      10. }
      Alles anzeigen


      moment, dass kann ja gar nicht stimmen! Ich weiß grad nicht weiter, ist grad echt zu hoch für mich. Mathe ist meine Schwäche.
    • Man muss sich entscheiden ob die Höhe konstant bleiben soll oder die Breite des Views. Ich empfehle dabei, dass die Breite Variabel ist, weil diese Prozentual nicht so stark auffällt, als wenn der Sichtbereich in der Höhe verändert wird. In diesem Fall sieht der Code wie folgt aus:

      GML-Quellcode

      1. view_wview = view_hview*(display_get_width()/display_get_height())
      2. view_wport = view_hport*(display_get_width()/display_get_height())
      3. surface_resize(application_surface, view_wview, view_hview);

      Die Surface sollte dabei ebenfalls verändert werden.

    • Also nur um jetzt es jetzt ganz zu verstehen und kein Fehler zumachen. Wenn ich will das die Höhe des Views konstant 270 ist schreibe ich:

      GML-Quellcode

      1. view_hview = 270;
      2. view_hport = 270;
      3. view_wview = floor(view_hview*(display_get_width()/display_get_height()))
      4. view_wport = floor(view_hport*(display_get_width()/display_get_height()))
      5. surface_resize(application_surface, view_wview, view_hview);


      Das floor hab ich noch ergänzt, weil z.B. bei 1366 / 768 * 270, 480,23 rauskommt. Und ich kann ja schlecht dem application_surface einen float Wert geben oder?

      edit: Vielleciht stell ich mich grad dumm an aber ich will mir ganz sicher sein, damit ich später keine bösen Überreachungen erleben muss :)