;
; ------------------------------------------------------------
;
; PureBasic - Windowed Screen example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Ошибка", "Не могу открыть спрайт-систему", 0)
End
EndIf
If OpenWindow(0, 0, 0, 340, 285, "Гаджет и спрайты!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 100, 25, "Захватить ввод")
ButtonGadget(2, 120, 10, 100, 25, "Кнопка 2")
ButtonGadget(3, 230, 10, 100, 25, "Кнопка 3")
TextGadget (4, 10, 40, 300, 30, "Мышь и клавиатура отпущены")
If OpenWindowedScreen(WindowID(0), 10, 70, 320, 200, 0, 0, 0)
LoadSprite(0, #PB_Compiler_Home + "examples/sources/Data/PureBasicLogo.bmp")
direction = 1
playerX = 1
playerY = 1
; Начните с освобожденного ввода
ReleaseMouse(#True)
InputReleased = 1
Repeat
Repeat
; Всегда обрабатывать все события, чтобы очистить очередь в каждом кадре
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
; Нормальное управление приложениями здесь
Gadget = EventGadget()
Select Gadget
Case 1
InputReleased = 0
ReleaseMouse(#False)
SetGadgetText(4, "Нажмите 'F1', чтобы убрать клавиатуру и мышь")
Case 2, 3
SetGadgetText(4, "кнопка "+Str(Gadget)+" нажата.")
EndSelect
EndSelect
Until Event = 0 ; Выходите из цикла событий, только когда больше нет доступных событий
ExamineKeyboard()
If InputReleased = 0
ExamineMouse()
; выполнение управления спрайтами и экранами в каждом кадре
If KeyboardPushed(#PB_Key_Up) And playerY > 0 : playerY -3 : EndIf
If KeyboardPushed(#PB_Key_Down) And playerY < 280 : playerY +3 : EndIf
If KeyboardPushed(#PB_Key_Left) And playerX > 0 : playerX -3 : EndIf
If KeyboardPushed(#PB_Key_Right) And playerX < 300 : playerX +3 : EndIf
If KeyboardPushed(#PB_Key_F1)
ReleaseMouse(#True)
InputReleased = 1
SetGadgetText(4, "Мышь и клавиатура отпущены");
EndIf
EndIf
; Очистим экран и нарисуем наши спрайты
ClearScreen(RGB(0,0,0))
ClipSprite(0, 0, 0, x, x/8)
DisplaySprite(0, x, 100)
DisplaySprite(0, x, x)
DisplaySprite(0, 300-x, x)
DisplaySprite(0, playerX, playerY)
x + direction
If x > 300 : direction = -1 : EndIf ; возвращаясь влево с отрицательным значением
If x < 0 : direction = 1 : EndIf ; двигаясь вправо с положительным значением
FlipBuffers() ; Инвертируем буферы (задняя часть становится передней (видимой) ... и мы можем сделать рендеринг на обратной стороне
Until Quit Or KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Ошибка", "Не могу открыть оконный экран!", 0)
EndIf
EndIf