; ; ------------------------------------------------------------ ; ; 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