Вывод 2D
|
|
Чужак | Дата: Воскресенье, 12.02.2012, 18:48 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Подскажите. Вот есть программа. Вроде работает правильно, но стоит передвинуть её окно, как вывод графики прекращается. Не могу понять в чём дело.
#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)) 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 Repeat Event.l = WaitWindowEvent() Until Event = #PB_Event_CloseWindow EndIf End
|
|
| |
fils | Дата: Четверг, 16.02.2012, 17:25 | Сообщение # 2 |
Сержант
Группа: Администраторы
Сообщений: 24
Статус: Offline
| 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
|
|
| |
Чужак | Дата: Четверг, 16.02.2012, 18:03 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Понял. Благодарю.
|
|
| |