2 Views, Fenster vergrößern, dass Views nicht verzerrt werden

    2 Views, Fenster vergrößern, dass Views nicht verzerrt werden

    Hallo,

    ich arbeite zur Zeit an einem Level-Editor, der mir am Ende ein bischen Arbeit abnehmen soll.
    Ich hatte vor, links mit einer View (Breite: 280, Länge: Festerngröße) eine Übersicht zu erstellen, wo ich dann am Ende Buttons etc. reinklatsche, womit ich Werte verändern kann. Quasi alles auf einem Blick.
    Rechts (der nicht ausgegraute Bereich) soll dann die "Erstell-Ebene" sein.

    So wie es momentan ist, ist es nicht verzerrt und passt alles. Aber die Erstell-Ebene ist mir zu wenig Platz, ich hätte diese gerne breiter, ohne dass am Ende irgendwas verzerrt ist.

    Bild:


    Zum Skallieren benutze ich ein Script von Rhazul, welches ich hier gefunden habe. Ich habe es ein wenig angepasst, damit es die zweite View auch konfiguriert:
    Spoiler anzeigen

    GML-Quellcode

    1. ///scr_scale(view, zoom, extra-width) by Rhazul
    2. if (view_wview[argument0] != window_get_width() || view_hview[argument0] != window_get_height()) {
    3. var ww = window_get_width();
    4. var hh = window_get_height();
    5. var xx = window_get_x();
    6. var yy = window_get_y();
    7. display_reset( 0 , true);
    8. window_set_rectangle(xx, yy, ww, hh);
    9. surface_resize(application_surface, ww, hh)
    10. view_wview[argument0] = (ww-argument2)/argument1;
    11. view_hview[argument0] = hh/argument1;
    12. view_wport[argument0] = ww-argument2;
    13. view_hport[argument0] = hh;
    14. //Extra-View <- Hab ich dazueditiert
    15. view_wview[1] = argument2/argument1;
    16. view_hview[1] = hh/argument1;
    17. view_wport[1] = argument2;
    18. view_hport[1] = hh;
    19. display_set_gui_size(ww, hh);
    20. }



    Meinen Raum passe ich individuell an, da ich nicht jedes Level in der selben Größe machen möchte - aber immer die selbe View haben will:
    Spoiler anzeigen

    GML-Quellcode

    1. /*
    2. Die wichtigsten Variablen:
    3. global.guiedit: 280 (Die Width des linken Bereichs)
    4. global.h: 1960
    5. global.w: 1120
    6. global.vxv: 0
    7. global.vyv: 0
    8. global.vwv: 720
    9. global.vhv: 1280
    10. global.vxp: 0
    11. global.vyp: 0
    12. global.vwp: 720
    13. global.vhp: 1280
    14. */
    15. room_set_height(rm_create, global.h);
    16. room_set_width(rm_create, global.w + global.guiedit);
    17. room_set_background_colour(rm_create, c_white, 1);
    18. room_set_background(rm_create, 0, 1, 0, back_grid, 0, 0, 1, 1, 0, 0, 1);
    19. room_tile_add_ext(rm_create, tile_editlayer, 0, 0, global.guiedit, 1, 0, 0, -5, 1, global.h, 1);
    20. room_set_view_enabled(rm_create, 1);
    21. room_set_view(rm_create, 0, 1, global.vxv + global.guiedit, global.vyv, global.vwv - global.guiedit, global.vhv, global.vxp + global.guiedit, global.vyp, global.vwp - global.guiedit, global.vhp, 140, 140, 140, 140, objView);
    22. room_set_view(rm_create, 1, 1, 0, 0, global.guiedit, global.vhv, 0, 0, global.guiedit, global.vhp, 0, 0, 0, 0, -1);
    23. room_goto(rm_create);



    Sehr viel Variablen-Mischmasch, ich hoffe man kann sich darin einigermaßen zurechtfinden.

    Hat jemand eine Idee, wo ich ansetzen soll? Ich habe schon ein wenig rumgetestet, aber jedes Mal verzerrt und die Größe ist so geblieben.

    ----

    Problem gelöst.

    Ich hatte beim Testen eine Sache außenvor gelassen, nun klappt alles.
    Hier mal das aktuallisierte Script:

    Spoiler anzeigen

    GML-Quellcode

    1. ///scr_scale(view, zoom, extra-width, room) by Rhazul
    2. if (view_wview[argument0] != window_get_width() || view_hview[argument0] != window_get_height()) {
    3. var ww = window_get_width();
    4. var hh = window_get_height();
    5. var xx = window_get_x();
    6. var yy = window_get_y();
    7. display_reset( 0 , true);
    8. if (room == argument3) {
    9. window_set_size(ww + argument2, hh);
    10. //window_set_rectangle(xx, yy, ww, hh);
    11. surface_resize(application_surface, ww + argument2, hh)
    12. view_wview[argument0] = ww/argument1;
    13. view_hview[argument0] = hh/argument1;
    14. view_wport[argument0] = ww;
    15. view_hport[argument0] = hh;
    16. //Extra-View
    17. view_wview[1] = argument2/argument1;
    18. view_hview[1] = hh/argument1;
    19. view_wport[1] = argument2;
    20. view_hport[1] = hh;
    21. display_set_gui_size(ww + argument2, hh);
    22. } else {
    23. var ww_after = 672;
    24. window_set_size(ww_after, hh);
    25. //window_set_rectangle(xx, yy, ww, hh);
    26. surface_resize(application_surface, ww_after, hh)
    27. view_wview[argument0] = ww_after/argument1;
    28. view_hview[argument0] = hh/argument1;
    29. view_wport[argument0] = ww_after;
    30. view_hport[argument0] = hh;
    31. display_set_gui_size(ww_after, hh);
    32. }
    33. }



    Das ist mit Sicherheit nicht die beste Lösung, aber für mein Projekt angepasst klappt alles so wie ich es haben möchte.
    Den 2. Teil des Scripts, mit ww_after = 672 und den Raum habe ich drin, da ich die Fenstergröße auch wieder zurücksetzen möchte, wenn ich in einem kleineren Raum komme (in diesem Falle das Menü)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „icqgamer“ ()

    Brauchst du wirklich 2 views? Ich würde das einfach mit einem gui layer bewerkstelligen. Du könntest ja links einen Pfeil anbringen womit man nach belieben die Bedienoberfläche aus/einklappt. Dafür würde ich einfach ein semitransparentes rechteck über 1/3 der Bildschirmfläche malen und darauf die Bedienelemente
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Mit den Views hatte das schon ganz gut geklappt. Aber ich bin grade dabei das ganze von GMS 1.4 in GMS 2 rüberzubringen, vielleicht komme ich auf deinem Vorschlag nochmal zurück (aktuell benutze ich wieder nur 1 View).
    Ich behalte mir das mal im Hinterkopf :)