programmer of DSG wrote:P*** vie, kun coolbasicissa olisi nopeampi alpha blendaus, niin toi sinun selittämä funktio olisi todella hieno.
Niinkuin koodaaja sanoi ei siihen muuta kun hieman matikkaa tarvita.
Tässä olisi pieni esimerkki funktioni käytöstä. Kyseessä on sama nappifunktio josta aikaisemmin kerroin.
Funktiolla saa helposti tehtyä hienoa grafiikkaa livenä, tosin siitä tulee helposti liian raskas varsinkin läppäreille. Funktiota ei siis sovi käyttää itse pelissä, ainakaan liikaa, mutta se sopii hyvin esimerkiksi valikkoihin. Molempia funktioita saa käyttää vapaasti. En ole ainakaan vielä kommentoinut koodia. Pyytäkää jos haluatte.
Code: Select all
ClsColor 0,0,255
Repeat
TextButton(10,10,"Nappi",100,40)
DrawScreen
Forever
Function TextButton(x,y,text1$,x1=0,y1=0,P=1)
r=getRGB(RED)
g=getRGB(GREEN)
b=getRGB(BLUE)
If P=0 Then
r=128
g=128
b=128
EndIf
If x1=0 Then x1=TextWidth(text1$)+10
If y1=0 Then y1=TextHeight(text1$)+8
If x1<TextWidth(text1$)+2 Then x1=TextWidth(text1$)+2
If y1<TextHeight(text1$)+2 Then y1=TextHeight(text1$)+2
If x1<10 Then x1=10
If y1<10 Then y1=10
If MouseX()>x And MouseX()<x+x1
If MouseY()>y And MouseY()<y+y1 Then MO=ON
If MO And MouseDown(1) Then MD=ON
EndIf
PickColor x,y
Color MakeUsable(getRGB(RED)-100,0,255),MakeUsable(getRGB(GREEN)-100,0,255),MakeUsable(getRGB(BLUE)-100,0,255)
GradientRoundedBox (x,y,x1,y1,5,5,MakeUsable(getRGB(RED)+200,0,255),MakeUsable(getRGB(GREEN)+200,0,255),MakeUsable(getRGB(BLUE)+200,0,255))
If Not MD
Color 100+50*MO,100+50*MO,255
GradientRoundedBox (x+3,y+3,x1-6,y1-6,5,5,50*MO,50*MO,100+50*MO)
Else
Color 50,50,100
GradientRoundedBox (x+3,y+3,x1-6,y1-6,5,5,150,150,255)
EndIf
Color r,g,b
CenterText x+x1/2+MD*2,y+y1/2+MD*2,text1$,2
If MO And MouseUp(1) Then
If P=1 Then Return ON
EndIf
EndFunction
Function GradientRoundedBox(x,y,x1,y1,xr=5,yr=5,r2=255,g2=255,b2=255)
r1=getRGB(RED)
g1=getRGB(GREEN)
b1=getRGB(BLUE)
If xr>x1/2 Then xr=x1/2
If yr>y1/2 Then yr=y1/2
If xr<1 Then xr=1
If yr<1 Then yr=1
For i=0 To y1
Color r1*(y1-i)/y1+r2*i/y1,g1*(y1-i)/y1+g2*i/y1,b1*(y1-i)/y1+b2*i/y1
If i<yr Or i>y1-yr Then
If i<yr Then
ang=ASin(Float(yr-i)/Float(yr))
Box x+xr-Cos(ang)*xr,y+i,Int(Cos(ang)*xr)*2+x1-xr*2,1
Else
ang=ASin(Float(yr-y1+i)/Float(yr))
Box x+xr-Cos(ang)*xr,y+i,Int(Cos(ang)*xr)*2+x1-xr*2,1
EndIf
Else
Box x,y+i,x1,1
EndIf
Next i
Color r1,g1,b1
EndFunction
Function MakeUsable(Number#,Mini#=0,Maxi#=100)
If Number#<mini# Then number#=mini#
If number#>maxi# Then number#=maxi#
Return number#
EndFunction
Kun käytätte GradientRoundedBoxia asettakaa ensin piirtoväri, jolla aloitaa, ja sitten funktion loppuosaan (r2,g2,b2) toinen väri.
xr=xPyöreys (koikeilkaa vaikka MouseX():ella)
yr=yPyöreys
TextButton
x=xKord. vasen laita
y=yKord. ylälaita
P=Possible/Mahdollinen, jos nolla niin nappia ei pysty painamaan
EDIT:Sorg. korjattu
kokosin koodin nopeasti enkä testannut, toivottavasti nyt toimii