PureBasic

OpenScreen()

Синтаксис

Result = OpenScreen(Width , Height , Depth , Title$ [, FlipMode [, RefreshRate]])

Описание


Открывает новый Экран (Screen) с указанными параметрами. Новый Экран будет создан с двумя видеобуферами, это позволяет последовательно отображать два буфера с помощью функции FlipBuffers(), что особенно полезно для игр.
Инициализация Спрайтов с помощью InitSprite() должна осуществляться перед использованием этой команды.

Параметры

Width, Height Разрешение нового Экрана, в пикселях. Указанное разрешение должно поддерживаться оборудованием, иначе Экран не будет создан. Для получения полного списка поддерживаемых разрешений можно использовать функцию ExamineScreenModes().
Depth Глубина цвета. Этот параметр может быть одним из следующих значений:

16: 65000 ????????????, ?????????????????????????? ??????????????.
24: 16 ??????. ????????????, ?????????????????????????? ??????????????.
32: 16 ??????. ????????????, ?????????? ??????????????, ?????? 24-???????????? ??????????, ?????????????????? ??????????-????????????????????.

Title$ Заголовок приложения, который будет отображаться при переключении обратно на рабочий стол. (Только для Windows). Он будет отображаться на панели задач, поэтому рекомендуется использовать заголовок, связанный с именем приложения.
FlipMode (дополн.) Устанавливает метод синхронизации Экрана, используемый при переключении буферов (также известный как 'Вертикальная синхронизация'). Может быть одним из следующих значений:
   #PB_Screen_NoSynchronization   : отключенная синхронизация 
   #PB_Screen_WaitSynchronization : включенная синхронизация (значение по умолчанию)
   #PB_Screen_SmartSynchronization: включенная синхронизация с экономией процессорного времени (только в полноэкранном режиме)
Ожидание синхронизации Экрана позволяет сделать переключение идеальным (без 'разрывов' и других видимых артефактов), потому что переключение выполняется, когда Экран полностью прорисован (и когда поверхность вывода Экрана находится за пределами видимой области Экрана). Это также связывает частоту переключения с фактическим обновлением Экрана, то есть: для Экрана с частотой 60 Гц оно может составлять не более 60 раз в секунду и т.д.
RefreshRate (дополн.) Устанавливает частоту обновления (в Гц) для нового Экрана. Если оборудование не поддерживает эту частоту обновления, то OpenScreen() завершится ошибкой. Для получения полного списка поддерживаемых частот обновления можно использовать функцию ExamineScreenModes().
Примечание. В Windows частота обновления может быть заблокирована или принудительно установлена драйверами видеокарты, поэтому она может быть неточной.

Возвращаемое значение

Возвращает ненулевое значение, если экран был успешно создан, в противном случае - 0.

Комментарии

Функции Requester нельзя использовать на экранах, созданных с помощью OpenScreen.

Чтобы открыть поверхность экрана в обычном окне, см. описание OpenWindowedScreen().

Пример (фран.)

;ПРЕДУПРЕЖДЕНИЕ. В этом примере возврат на рабочий стол (ALT + TAB) не осуществляется.

;Инициализация спрайтов, клавиатуры и мыши
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
    MessageRequester("Ошибка", "Не могу инициализировать экран.")
    End
EndIf
FPS_ElapsedTime = ElapsedMilliseconds()
;Открытие экрана
If OpenScreen(800, 600, 32, "Exemple OpenScreen") = 0
    MessageRequester("Ошибка", "Не могу открыть экран.")
    End
EndIf

;Курсор мыши
CreateSprite(0, 20, 20, #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(0))
Box(0, 0, 20, 20, RGB(255, 255, 255))
StopDrawing()

;Зритель "Сюда, чтобы уйти"
CreateSprite(1, 200, 100, #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(1))
Box(0, 0, 200, 100, RGB(255, 255, 0))
DrawText(10, 25, "Сюда, чтобы уйти", RGB(255, 255, 255), RGB(255, 0, 0))
StopDrawing()

;Основной цикл
Repeat

    ;Очистить экран полностью и отобразить серый фон
    ClearScreen(RGB(128, 128, 128))

    ;Читаем события клавиатуры и мыши
    ExamineMouse()
    ExamineKeyboard()

    ;Положение мыши
    x = MouseX()
    y = MouseY()

    ;Отображение курсора мыши в режиме реального времени
    DisplaySprite(0, X, Y)
    ;Просмотр зрителя "Летите над, чтобы уйти"
    DisplaySprite(1, 500, 50)

    ;Обнаружение столкновения между курсором мыши и дисплеем
    If SpriteCollision(0, X, Y, 1, 500, 50) <> 0
        End ; Если столкновение, то мы закрываем программу
    EndIf

    ;Расчет FPS (изображение в секунду)
    FPS_Counter + 1
    If FPS_Counter >= FPS
        FPS = FPS_Counter * 1000 / (ElapsedMilliseconds() - FPS_ElapsedTime)
        FPS_Counter = 0
        FPS_ElapsedTime = ElapsedMilliseconds()
    EndIf

    ;Отображение FPS и текста
    StartDrawing(ScreenOutput())
    DrawText(0, 0, "FPS : " + StrD(FPS, 1))
    DrawText(0, 75, "Нажмите ESC для выхода", RGB(0, 0, 0), RGB(255, 255, 255))
    DrawText(0, 550, "Нажимайте клавиши со стрелками на клавиатуре при перемещении мыши", RGB(255, 0, 0), RGB(0, 255, 0))
    StopDrawing()

    ;Управление 4 клавишами со стрелками на клавиатуре
    If KeyboardPushed(#PB_Key_Right)
        RotateSprite(0, 45, #PB_Relative)
    EndIf
    If KeyboardPushed(#PB_Key_Left)
        RotateSprite(0, 1, #PB_Relative)
    EndIf
    If KeyboardPushed(#PB_Key_Up)
        ZoomSprite(0, 100, 100)
    EndIf
    If KeyboardPushed(#PB_Key_Down)
        ZoomSprite(0, 20, 20)
    EndIf

    ;Теперь, когда все рассчитано и отображено в невидимом буфере,
    ;мы инвертируем буферы, чтобы сделать сцену видимой на экране.
    FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape) ;Выйдите из приложения, нажав клавишу ESC

; Идея: заменить строку кода : If OpenScreen(800, 600, 32, "Exemple OpenScreen") = 0
; на    : If OpenScreen(800, 600, 32, "Exemple OpenScreen", #PB_Screen_NoSynchronization) = 0
; или : If OpenScreen(800, 600, 32, "Exemple OpenScreen", #PB_Screen_SmartSynchronization) = 0
; и наблюдать за FPS, а также качеством изображения (переместите мышь)

См. также

OpenWindowedScreen(), FlipBuffers()

Поддерживаемые OS

Все

<- NextScreenMode() - Оглавление Screen - OpenWindowedScreen() ->