PCopy
 
Копирует одну графическую или текстовую страницу в другую

Синтаксис

Declare Sub PCopy ( ByVal source As Integer = -1, ByVal destination As Integer = -1 )

Использование

PCopy [ source ] [, destination ]

Параметры

source
страница откуда копировать
destination
страница куда копировать

Описание

Копирует одну графическую или текстовую видеостраницу в другую. Полезно для рисования графики на одной невидимой странице и копировании ее на активную видимую страницу - создание графики без мерцания и гладкой анимации. Чаще это известно как "двойная буферизация" или "переключения страниц" .

source и destination ссылаются на номера страниц. Страница 'source' копируется в страницу 'destination' когда вызывается pcopy.

Если аргумент source опущен, предполагается, что это текущая рабочая страница. Если аргумент destination опущен, предполагается, что это текущая видимая страница.

Пример


'Устанавливаем экран 320 x 200 в 8-битный цвет и с 2-мя страницами видео.
ScreenRes 320, 200, 8, 2

'Устанавливаем рабочую страницу в 1 и отображаемую страницу в 0
ScreenSet 1, 0

'Рисует круг , который движется в верхней части экрана
For x As Integer = 50 To 269
    Cls                    'Очищаем экран
    Circle (x, 50), 50, 14 'Рисуем желтый круг с радиусом в 50 пикселей на стр. 1
    PCopy 1, 0             'Копируем наше изображение из страницы 1 в страницу 0
    Sleep 25               'Ждем 25 миллисекунд.
Next x

'Подождем нажатия клавиши перед закрытием экрана
Sleep


'' Пример консольного режима:

'' Устанавливаем рабочую страницу в 0 и отображаемую страницу в 1
#if __FB_LANG__ = "QB"
Screen ,, 0, 1
#else
Screen , 0, 1
#endif

Dim As Integer i, frames, fps
Dim As Double t

t = Timer

Do
    '' Заполняем рабочую страницу определенным цветом и символом
    Cls
    Locate 1, 1
    Color (i And 15), 0
    Print String$(80 * 25, Hex$(i, 1));
    i += 1

    '' Покажем кадры в секунду
    Color 15, 0
    Locate 1, 1
    Print "fps: " & fps,
    If Int(t) <> Int(Timer) Then
        t = Timer
        fps = frames
        frames = 0
    End If
    frames += 1

    '' Копируем рабочую страницу в видимую страницу
    PCopy

    '' 50мс сна в кадре, чтобы высвободить время процессора
    Sleep 50, 1

    '' Выполняем цикл, пока пользователь не нажмет клавишу
Loop Until Len(Inkey$)


Различия платформ

  • Максимальное количество текстовых страниц в Windows - 4.
  • Максимальное количество текстовых страниц в DOS - 8.
  • Максимальное количество текстовых страниц для всех других платформ - 1.
  • Максимальное количество графических страниц зависит от того, сколько было указано, когда вызывалась функция Screen или ScreenRes.

Отличия от QB

  • Нет

См. также