Quote (Чужак)
стоит передвинуть её окно, как вывод графики прекращается.
Это потому что события программы не обрабатываются и программа по сути виснет.
Построение графики нужно вынести в отдельный поток и тогда заработает как надо. Code
Procedure Draw(z)
Dim r.f(600)
Dim g.f(600)
Dim b.f(600)
For n=0 To 10000 ; количество сдвигаемых квадратов
If StartDrawing(ImageOutput(0))
For x=499 To 0 Step -1;прорисовка экрана
xx=1000-x
ro=RGB(Int(r(600-x)),Int(g(600-x)),Int(b(600-x)))
LineXY(x,x,xx,x,ro)
LineXY(xx,x,xx,xx,ro)
LineXY(xx,xx,x,xx,ro)
LineXY(x,x,x,xx,ro)
LineXY(0,0,1000,1000,0)
LineXY(0,1000,1000,0,0)
Next x
StopDrawing()
SetGadgetState(0, ImageID(0))
EndIf
t=t+1;переменная отслеживает расстояние между квадратами
If t=>99
t=0
r(0)=Random(255)
g(0)=Random(255)
b(0)=Random(255)
dr=(r(99)-r(0))/100
dg=(g(99)-g(0))/100
db=(b(99)-b(0))/100
EndIf
r(99)=r(100)-dr
g(99)=g(100)-dg
b(99)=b(100)-db
For x=600 To 1 Step -1
r(x)=r(x-1)
g(x)=g(x-1)
b(x)=b(x-1)
Next x
Next n
EndProcedure
#WINDOW_MAIN = 1
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
Define.f dr,dg,db
If OpenWindow(#WINDOW_MAIN, 0, 0, 1000, 1000, "Window Drawing", #FLAGS) And CreateImage(0, 1000, 1000)
ImageGadget(0, 0, 0, 1000, 1000, ImageID(0))
CreateThread(@Draw(), 0)
Repeat
Event.l = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
End