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
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
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:
GML-Quellcode
- //argument0 = pos x
- //argument1 = pos y
- //argument2: 0 = down, 1 = up noch nicht gemacht
- var a,lenght,height,anz,posy,col;
- argument0 = floor(argument0/15)*15 // damit es später mit dem runden aufgeht
- argument1 = floor(argument1/15)*15
- height = 0
- anz = 0
- col = make_color_rgb(150,150,255)
- posy = argument1
- for(i=0;i<13;i+=1)
- {
- if(is_real(argument[i+3])) //optionen die 0 wären zu einem string machen
- a[i] = ''
- else
- a[i] = argument[i+3]
- anz += 1
- }
- //die Breite der box ist so lang wie die längste option
- 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]))
- for(i=0;i<13;i+=1){if(a[i] != ''){height += 15}}
- if(mouse_rect(argument0,argument1,argument0+length,argument1+height))
- {
- posy = floor((mouse_y-argument1)/15)
- }
- draw_set_color(c_white)
- draw_roundrect(argument0,argument1,argument0+length+20,argument1+height+15,0) // box zeichnen
- draw_set_color(c_black)
- draw_roundrect(argument0,argument1,argument0+length+20,argument1+height+15,1)
- 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
- for(i=0;i<anz;i+=1) //texte zeichnen
- {
- draw_text(argument0+10,argument1+i*15+5,a[i])
- }
- screen_refresh()// damit es auch ausserhalb des draw-events funktioniert
- if(mouse_rect(argument0,argument1,argument0+length,argument1+height))//ist die maus über der box
- {
- if(mouse_check_button_released(mb_left))
- {
- for(i=0;i<anz;i+=1)
- {
- if(mouse_rect(argument0+5,argument1+i*15+6,argument0+length+15,argument1+i*15+24)){//wenn die maus auf dem blauen rechteck ist...
- return(i);break} //nummer des rechtecks zurückgeben
- }
- exit
- }
- else return(-1)//sonst -1 zurückgeben
- }
- else return(-1)
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
