Problem mit Options-Menu

  • GM 8

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

  • Problem mit Options-Menu

    Hallo,
    ich versuche gerade, ein Options-Menu zu machen, das erscheint, wenn man z.B. irgendwo draufklickt. Wahrschinlich ist die Lösung einfach und ich sehs einfach nicht.
    Das Zeichnen Funktioniert, aber manchmal gibt das Skript die falsche Zahl zurück.
    Das ist mein Code:
    Spoiler anzeigen

    GML-Quellcode

    1. //argument0 = pos x
    2. //argument1 = pos y
    3. //argument2: 0 = down, 1 = up noch nicht gemacht
    4. var a,lenght,height,anz,posy,col;
    5. argument0 = floor(argument0/15)*15 // damit es später mit dem runden aufgeht
    6. argument1 = floor(argument1/15)*15
    7. height = 0
    8. anz = 0
    9. col = make_color_rgb(150,150,255)
    10. posy = argument1
    11. for(i=0;i<13;i+=1)
    12. {
    13. if(is_real(argument[i+3])) //optionen die 0 wären zu einem string machen
    14. a[i] = ''
    15. else
    16. a[i] = argument[i+3]
    17. anz += 1
    18. }
    19. //die Breite der box ist so lang wie die längste option
    20. length = max(string_width(a[0]),string_width(a[1]),string_width(a[2]),string_width(a[3]),string_width(a[4]),string_width(a[5]),string_width(a[6]),string_width(a[7]),string_width(a[8]),string_width(a[9]),string_width(a[10]),string_width(a[11]),string_width(a[12]))
    21. for(i=0;i<13;i+=1){if(a[i] != ''){height += 15}}
    22. if(mouse_rect(argument0,argument1,argument0+length,argument1+height))
    23. {
    24. posy = floor((mouse_y-argument1)/15)
    25. }
    26. draw_set_color(c_white)
    27. draw_roundrect(argument0,argument1,argument0+length+20,argument1+height+15,0) // box zeichnen
    28. draw_set_color(c_black)
    29. draw_roundrect(argument0,argument1,argument0+length+20,argument1+height+15,1)
    30. draw_roundrect_color(argument0+5,argument1+posy*15+6,argument0+length+15,argument1+posy*15+24,col,col,0)//blaues rechteck unter der option zeichnen, auf der gerade die maus liegt
    31. for(i=0;i<anz;i+=1) //texte zeichnen
    32. {
    33. draw_text(argument0+10,argument1+i*15+5,a[i])
    34. }
    35. screen_refresh()// damit es auch ausserhalb des draw-events funktioniert
    36. if(mouse_rect(argument0,argument1,argument0+length,argument1+height))//ist die maus über der box
    37. {
    38. if(mouse_check_button_released(mb_left))
    39. {
    40. for(i=0;i<anz;i+=1)
    41. {
    42. if(mouse_rect(argument0+5,argument1+i*15+6,argument0+length+15,argument1+i*15+24)){//wenn die maus auf dem blauen rechteck ist...
    43. return(i);break} //nummer des rechtecks zurückgeben
    44. }
    45. exit
    46. }
    47. else return(-1)//sonst -1 zurückgeben
    48. }
    49. else return(-1)
    Alles anzeigen


    hier noch die .gmk:
    problem.zip

    Villeicht gibts auch eine einfachere Lösung. In manchen Spielen hab ich solche Menus wie die von Windows gesehen, deshalb habe ich in der Hilfe der Extension Windows Dialogs nachgesehen. Habs aber nicht gefunden.

    Falls jemand eine Lösung oder eine einfachere Variante hat wär ich dankbar.

    Mfg Alron
  • Hi Alron,

    ich kann das Script hier zwar nicht ausprobieren, aber vielleicht geht's ja trotzdem.
    Zeile 20 ist viel zu lang. Mach einfach

    GML-Quellcode

    1. length = string_width(a[0]);
    2. k = 0;
    3. repeat (anz - 1) {
    4. length = max(length, string_width(a[i]);
    5. k += 1;
    6. }


    Aber das kann ja nicht der Fehler sein.

    Und dann versteh ich Zeile 21 nicht. Warum werden die vorher extra umgemodelten Leerstrings jetzt ignoriert? Wenn nicht angegebene Argumente (die ja vom GM dann als 0 ausgespuckt werden) ignoriert werden sollen, brauchst du sie auch gar nicht erst in "anz" und im Array "a" mit einzubeziehen. Das könnte m.E. der Fehler sein.
  • Benutzer online 1

    1 Besucher