angepasster verimagegadgetierter Beispielcode (Kaerus version)
und weiterer verbesserungsvorschlag von unten weiter
Code: Alles auswählen
;PureBasic DEMO 4.00
; Mehrere Kreise in zufälligen Farben
;InitSprite() :InitKeyboard()
Width=700 : Height=500 : #ScreenBits = 32 : MiddleX = Width / 2 : MiddleY = Height / 2: Radius = 100
Enumeration
#Window
#ImageGadget
#Image
EndEnumeration
CreateImage(#Image,Width,Height)
If OpenWindow(#WINDOW, 0, 0, Width, Height, "Lines", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ImageGadget(#Imagegadget,0,0,width,height,0) ; erstmal leer
x = Width/2 ; Berechnungen aus nem Drawing-Block raushalten
y = Height/2
If StartDrawing(ImageOutput(#Image))
Box(0,0,Width,height,RGB(192,192,192))
For Radius = Height/3 To 10 Step -10
Circle(x, y, radius ,RGB(Random(255),Random(255),Random(255)))
Next
StopDrawing()
SetGadgetState(#ImageGadget,ImageID(#Image))
EndIf
EndIf
;x = Width/4
;y = Height/4
;*** dieser wert ändert sich nicht mehr,
; also vor der hauptschleife berechnen
Radius = Height/3
#ufftata=2*3.14159265/360
;*** startwert für den durchlaufenden grad-wert
grad.f = 0
Repeat
Event = WaitWindowEvent(5) ; dies hier gibt das tempo vor
If Not Event ; wenn der timer abgelaufen ist
If StartDrawing(ImageOutput(#Image))
; ** nur eine linie pro Durchlauf
LineXY(x,y,x+Sin(grad*#ufftata) *Radius,y+Cos(grad*#ufftata) *Radius, RGB(Random(255),Random(255),Random(255)))
StopDrawing() ; und gleich wieder zu, nur draw-operationen in den drawing-block.
; ** grad wird bei jedem durchlauf hochgezählt
grad +1 : If grad > 359 : grad = 0 : EndIf
EndIf
SetGadgetState(#ImageGadget,ImageID(#Image))
EndIf
Until Event = #PB_Event_CloseWindow
End