Wunderbar, Farbverläufe kannst du ja mit Image noch leiter machen als mit Sprites.
Stichwort: Gradient:
Dein Code vereinfacht sich nun zu:
Code: Alles auswählen
Width = 800
Height = 600
OpenWindow(0, 0, 0, Width, Height, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
LoadImage(0, "Burg.bmp")
ResizeImage(0, Width, Height)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)
BoxedGradient(0,0,Width,Height)
GradientColor(1.0,$80000000)
GradientColor(0.8,$00000000)
GradientColor(0.0,$00000000)
Box(0,0,Width,Height)
StopDrawing()
ImageGadget(0, 0, 0, 640, 512, ImageID(0))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Du kannst auch gleich mein RoundBoxedGradient nehmen:
Code: Alles auswählen
Structure RoundBoxedGradient
x.i
y.i
Width.i
Height.i
RoundX.i
RoundY.i
EndStructure
Procedure.f RoundBoxedGradientCallback(x.i, y.i)
Shared RoundBoxedGradient.RoundBoxedGradient
With RoundBoxedGradient
x - \x
y - \y
If x < \RoundX
If y < \RoundY
ProcedureReturn Sqr(Pow((\RoundX-x)/\RoundX,2)+Pow((\RoundY-y)/\RoundY,2))
ElseIf y >= \Height-\RoundY
ProcedureReturn Sqr(Pow((\RoundX-x)/\RoundX,2)+Pow((\RoundY+y+1-\Height)/\RoundY,2))
Else
ProcedureReturn (\RoundX-x)/\RoundX
EndIf
ElseIf x >= \Width-\RoundX
If y < \RoundY
ProcedureReturn Sqr(Pow((\RoundX+x+1-\Width)/\RoundX,2)+Pow((\RoundY-y)/\RoundY,2))
ElseIf y >= \Height-\RoundY
ProcedureReturn Sqr(Pow((\RoundX+x+1-\Width)/\RoundX,2)+Pow((\RoundY+y+1-\Height)/\RoundY,2))
Else
ProcedureReturn (\RoundX+x+1-\Width)/\RoundX
EndIf
Else
If y < \RoundY
ProcedureReturn (\RoundY-y)/\RoundY
ElseIf y >= \Height-\RoundY
ProcedureReturn (\RoundY+y+1-\Height)/\RoundY
Else
ProcedureReturn 0
EndIf
EndIf
EndWith
EndProcedure
Procedure RoundBoxedGradient(x.i, y.i, Width.i, Height.i, RoundX.i, RoundY.i=#PB_Default)
Shared RoundBoxedGradient.RoundBoxedGradient
With RoundBoxedGradient
\x = x
\y = y
\Width = Width
\Height = Height
\RoundX = RoundX
\RoundY = RoundY
If RoundY=#PB_Default : \RoundY = RoundX : EndIf
If \RoundX < 0 : \RoundX = 0 : EndIf
If \RoundY < 0 : \RoundY = 0 : EndIf
If \RoundX*2 > Width : \RoundX = Width/2 : EndIf
If \RoundY*2 > Height : \RoundY = Height/2 : EndIf
EndWith
CustomGradient(@RoundBoxedGradientCallback())
EndProcedure
Width = 800
Height = 600
OpenWindow(0, 0, 0, Width, Height, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
LoadImage(0, "Burg.bmp")
ResizeImage(0, Width, Height)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)
RoundBoxedGradient(-50,-50,Width+100,Height+100,100)
GradientColor(1.0,$F0000000)
GradientColor(0.0,$00000000)
Box(0,0,Width,Height)
StopDrawing()
ImageGadget(0, 0, 0, 640, 512, ImageID(0))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
ich denke damit lässt es sich "spielen"