Четверг, 08.12.2022, 12:26
PureBasic - кроссплатформенный язык программирования
Главная Форум Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
PureBasic - форум » Вопросы по PureBasic (Windows) » Вопросы новичков » Вывод 2D (непонятки с выводом графики)
Вывод 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
Понял. Благодарю.
 
PureBasic - форум » Вопросы по PureBasic (Windows) » Вопросы новичков » Вывод 2D (непонятки с выводом графики)
  • Страница 1 из 1
  • 1
Поиск:

Копировать материалы сайта без разрешения автора, ЗАПРЕЩЕНО!

Сделать бесплатный сайт с uCoz