Auflösungssystem wie in Hyper Light Drifter?

    Auflösungssystem wie in Hyper Light Drifter?

    Hi Leute,
    ich hab eine kurze Frage und zwar, wie man das Auslösungssystem aus Hyper Light Drifter nachbauen kann.
    Die Entwickler selbst sagten, dass sie in der Engine eine niedrigere Auslösung benutzt haben als später im Spiel, aber könnte mir das jemand genauer erklären, bzw. sagen, wie man das konkret im Game Maker um setzen kann?
    Ich bedank mich jetzt schon mal für eure Antworten

    MfG
    Es scheint so als ob sie einfach die view port größe geändert hätten wenn man die Auflösung auswählen kann.

    GML-Quellcode

    1. view_wport[0] = 1920;
    2. view_hport[0] = 1080;

    Das ist auch sonst die gängige Methode. Dann muss dazu noch interpolate pixels abgeschalten sein und es läuft.

    Genauer erklärt stellst du im Room Editor zB 960x540 als view größe für die view0 ein und auch für den view port. Und in deinem Optionsmenu code musst du wenn du die Auflösung wählen lässt dann dementsprechend die viewport ändern. Die Surface von der die Entwickler reden ist wasl die Application Surface vom GM, auf der standardmäßig alles gedrawed wird (anstatt direkt auf den Bildschirm zu drawen wie DrawGUI es tut(soweit ich weiß)).

    Quellen;
    reddit.com/r/gamemaker/comment…el_game_like_hyper_light/
    http://nightmargin.tumblr.com/post/102886823891/on-resolution

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Aku_Ryou“ ()

    Das heißt ja nur, das der View kleiner als der Viewport ist. Wenn du eine Auflösung vorgeben möchtest, dann solltest du prüfen wie oft die Breite und Höhe des View jeweils in die Breite und Höhe des ports passt. Wenn bspw. für die x Komponente 1.7 und für die y Komponente 1.36 rauskommt, dann nimmst du die 1.7 (immer die größte) als deinen Scale. Wenn du dann den view mit view_width*1.7 und view_height*1.7 malst, hast du die Breite des Fensters vollständig ausgefüllt, oben und unten gibt es dann letterboxen, wenn die y Komponente größer ist gibt es Letterboxen links und rechts.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Wir beide^^

    Du musst dir mit display_get_width und height den aspect ratio des Monitors errechnen. Dann kannst du deinen viewport daran anpassen. Wie es Rhazul auch beschrieben hat, deteillierter beschreiben wird (wahrscheinlich).

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    Noch mal einfacher:
    Du teilst deine view breite durch die displaybreite
    Dann teilst du deine view höhe durch die displayhöhe
    Danach guckst du welcher wert von beiden größer ist.
    Den nimmst du dann als deinen scale mit dem du das ganze multiplizieren kannst
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Ok gut, ich habe jetzt verstanden:
    view breite und höhe durch Bildschirm Breite und Höhe teilen und den größeren Wert als Faktor nehmen. Ok.
    Mein Problem ist eher, dass ich damit praktisch nichts anfangen kann, weil ich nicht weiß, wie ich das in gm umsetzen muss.
    Ich bin bis jetzt eher darauf konzentriert gewesen, die Grafiken umzupixeln, um die im GM nutzen zu können und hab mich noch nicht mit der
    Sprache befasst.
    Wäre jemand so freundlich mir eine Schritt-für-Schritt-Anleitung zu geben?

    Vielen Dank :)
    Frei aus dem Bauch raus geschossen sieht das dann so aus (nach Rhazul´s anleitung):

    Du hast ein Object mit einer ganz hohen depth damit es als erstes ausgeführt wird, zB obj_game_control mit einer depth von 10000.
    In dessen create Event findet dann die ganze Berechnung und umstellung statt.
    In deinem Room hast du view 0 aktiviert und der view port hat die selben werte wie die view für die größe.

    GML-Quellcode

    1. ///create
    2. var breite = view_wview[0] / display_get_width();
    3. var hoehe = view_hview[0] / display_get_height();
    4. view_wport[0] = view_wview[0]*max(breite,hoehe);
    5. view_hport[0] = view_hview[0]*max(breite,hoehe);

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    Der Code kann auch einfach im room create event ausgeführt werden,dann braucht es kein separates objekt
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

    Aku_Ryou schrieb:


    Du hast ein Object mit einer ganz hohen depth damit es als erstes ausgeführt wird, zB obj_game_control mit einer depth von 10000.
    [/gml]


    Sorry für das Offtopic, aber diese Aussage verwirrt mich gerade.
    Depth hat doch nichts mit der Priorität zu tun welche Objekte als erste in einem Room erstellt wird sonder ist jegliche ein grafische Ebenentiefenwert.
    Das regeln welche Objekte in welcher Reihenfolge ausgeführt werden, regelt man doch im Room unter Settings mit der Liste Inder "Instance Order"
    huhu
    Irgendwie haut es nicht so ganz hin wie ich es mir vorgestellt habe.
    Also ich habe im Room editor die views geändert:

    Habe ein Objekt erstellt, welches zu Beginn die Breite und Höhe abfragt:

    Und jetzt ist das Bild ziemlich verzerrt.

    Ich glaube, nachdem ich die views im Room geändert habe, ist nicht mehr viel passiert^^
    Also der port sollte der displaygröße entsprechen . Pass statt dessen die viewgröße an
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    view_wview *= max (h,b);
    view_hview *= max (h,b);
    view_wport = display_width;
    view_hport = display_height;
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Könntest du mir bitte erklären, was ich genau womit ersetzen muss?
    Ich hatte davor:
    var breite = view_wview[0] / display_get_width();
    var hoehe = view_hview[0] / display_get_height();
    view_wport[0] = view_wview[0]*max(breite,hoehe);
    view_hport[0] = view_hview[0]*max(breite,hoehe);
    was muss ich jetzt mit
    view_wview *= max (h,b);
    view_hview *= max (h,b);
    view_wport = display_width;
    view_hport = display_height;
    machen?
    Ich habe h und b mit hoehe und breite ersetzt und kriege immer noch Errors.
    display_width wäre dann display_get_width() oder window_get_width() wenns nicht im fullscreen läuft.Das selbe natürlich auch für die höhe. Der Compiler zeigt dir auch immer in welcher zeile und bei welcher variable der fehler auftritt im errorlog
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Ich bräuchte jemanden, der mir erklärt, wie ich das mit dem Auflösungsmenü für den Spieler mache und es dann auch so wie in HLD umsetze.
    So wie wir das machen kommen wir nur von Hölzchen auf Stöckchen weil mir im Grunde genommen immer etwas fehlt, was ich nicht verstehe und ich erfahre das quasi scheibchenweise.
    Ich bin natürlich trotzdem für jede Hilfe dankbar, jetzt habe ich zumindest das Prinzip verstanden.