Auflösung&Farbtiefe einstellen - Menüinterface (Gelöst)

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

  • Auflösung&Farbtiefe einstellen - Menüinterface (Gelöst)

    Ich hätte da wieder einmal eine Frage. Ich habe versucht, ein textbasiertes Menü zu erstellen, mittels dessen die Auflösung und die Farbtiefe des Spiels durchgeschaltet werden kann. Das ganze basiert grob auf dem Tutorial "textbasiertes Menü" von gamer bzw. Chronic, die Codes wurden aber an einigen Stellen erweitert. Die SuFu hat ein wenig mitgeholfen, aber mein Problem leider nicht gelöst: Das Display flackert wie irre, was darauf schließen lässt, dass die Farbtiefe endlos umgeschaltet wird, außerdem wird bei einer Auflösungsänderung das Spielfenster alles andere als korrekt angezeigt - nämlich bildschirmfüllend, obwohl die Fullscreen-Option deaktiviert ist.
    Hier sind die Codes, die ich verwendet habe:

    Create Event:

    GML-Quellcode

    1. scr_InitMenu()
    2. res=0
    3. dpt=0


    scr_InitMenu:

    GML-Quellcode

    1. {
    2. menuSelected=1
    3. menuText[0]=4
    4. menuText[1]="Toggle Fullscreen"
    5. menuText[2]="Toggle Resolution"
    6. menuText[3]="Toggle Color depth"
    7. menuText[4]="Sound Test"
    8. }


    Draw-Event:

    GML-Quellcode

    1. {
    2. for (i = 1; i <= menuText[0]; i+=1) {
    3. if (menuSelected = i) { draw_set_color(c_red); } else { draw_set_color(c_dkgray); }
    4. draw_text(288,112+(i*16)-16,menuText[i]);
    5. }
    6. }


    Aufwärts drücken:

    GML-Quellcode

    1. {
    2. menuSelected -=1;
    3. if (menuSelected < 1) { menuSelected = menuText[0]; }
    4. }


    Abwärts drücken:

    GML-Quellcode

    1. {
    2. menuSelected +=1;
    3. if (menuSelected > menuText[0]) { menuSelected = 1; }
    4. }


    Enter drücken:

    GML-Quellcode

    1. {
    2. switch(menuSelected) {
    3. case 1: // Fullscreen umschalten
    4. window_set_fullscreen(!window_get_fullscreen())
    5. break;
    6. case 2: // Auflösung umschalten
    7. res+=1
    8. break;
    9. case 3: // Farbtiefe umschalten
    10. dpt+=1
    11. break;
    12. case 4: // Soundtest einleiten (Funktioniert)
    13. instance_create(x,y,obj_soundtest)
    14. instance_destroy()
    15. break;
    16. }
    17. }
    Alles anzeigen


    Step Event:

    GML-Quellcode

    1. if res=0 {display_set_size(800,600) exit}
    2. if res=1 {display_set_size(1024,768) exit}
    3. if res=2 {display_set_size(640,480) exit}
    4. if res=3 {res=0 exit}
    5. if dpt=0 {display_set_colordepth(16) exit}
    6. if dpt=1 {display_set_colordepth(32) exit}
    7. if dpt=2 {dpt=0 exit}


    Screenshot ging leider nicht, weil da nur das Spielfenster aufgezeichnet wird, nicht aber die fehlerhafte Umgebung oder das Spielinterne Bildschirmflackern.
    Meines Erachtens nach lässt sich der Fehler im Zusammenhang von Enter und Step finden, doch zur Sicherheit hab ich den ganzen anderen Code auch mitgepostet. Ich hoffe mal, jemand kann mir da helfen :)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Irrenhaus3 ()

  • Also, korrigiert mich bitte wenn ich etwas falsches schreibe.

    Wenn ich das richtig sehe ist im Step Event etwas falsch, nämlich der ganze Code gehört dort gar nicht rein.

    Jeden Step müsste er die Farbtiefe und die Auflösung umschalten, wobei es am GM liegt ober er das Tut wenn die Einstellung schon gegeben ist oder nicht.

    Die Änderung darf nur einmal ausgeführt werden. Pack sie doch mit in das Enter event beim switch mit rein. Dann wird nicht 30x in der sekunde die farbtiefe geändert sondern nur einmal beim drücken der enter taste.
  • Warum nicht? So müsste es doch gehen:

    GML-Quellcode

    1. {
    2. switch(menuSelected) {
    3. case 1: // Fullscreen umschalten
    4. window_set_fullscreen(!window_get_fullscreen())
    5. break;
    6. case 2: // Auflösung umschalten
    7. res+=1
    8. if res=3 {res=0}
    9. if res=0 {display_set_size(800,600)}
    10. if res=1 {display_set_size(1024,768)}
    11. if res=2 {display_set_size(640,480)}
    12. break;
    13. case 3: // Farbtiefe umschalten
    14. dpt+=1
    15. if dpt=2 {dpt=0}
    16. if dpt=0 {display_set_colordepth(16)}
    17. if dpt=1 {display_set_colordepth(32)}
    18. break;
    19. case 4: // Soundtest einleiten (Funktioniert)
    20. instance_create(x,y,obj_soundtest)
    21. instance_destroy()
    22. break;
    23. }
    24. }
    Alles anzeigen
  • Benutzer online 1

    1 Besucher