Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль / sidorov / Сидоров.DOC
Скачиваний:
30
Добавлен:
10.12.2013
Размер:
1.68 Mб
Скачать

1. 15. 5. 2. Мультипликация с чередованием видеостраниц

Для изменения всего изображения на экране необходимо быстро заменять рисунок на экране другим, готовым рисунком. Это обеспечивается возможностью рисования "вслепую" - на невидимой странице экрана. При этом во время просмотра одной видеостраницы, на другой (невидимой, но активной) происходит процесс рисования. Затем страницы переключаются и невидимая страница активизируется для рисования.

Для качественных графических адаптеров можно установить режимы работы с несколькими графическими страницами, см. таблицу на стр.

Страницы переключаются для просмотра на экране процедурой:

SetVisualPage(N);

где N - номер страницы. По умолчанию видна и активна страница с N=0.

Страница активизируется для рисования процедурой:

SetActivePage(N);

Напомним, что вывод рисунков можно проводить и на невидимую страницу.

Переключение для просмотра выполняется очень быстро, что важно при создании движущихся изображений. Таким образом, для создания изменяющихся изображений, во время визуального просмотра одной страницы на другой (невидимой, но активной) странице создается рисунок. Затем страницы переключаются для просмотра подготовленного рисунка и процесс повторяется.

107

Приведем пример фрагмента программы - мультипликации с использованием чередования кодовых страниц (режим двух видеостраниц).

k:= 2; { количество кодовых страниц }

Repeat

for i:= 1 to 100 do

begin j:= i mod k; { j - номер кодовой страницы }

SetActivePage(j); { активизируем страницу без ее показа }

ClearDevice; { стираем старый рисунок }

SetfillStyle(1, i div 15 +1); { изменение цвета заполнения через 15 стр. }

Bar(1, 1, i+10, i+5); { строим новый рисунок }

SetVisualPage(j); delay(40) { показываем страницу }

end

Until KeyPressed;

В приведенной программе на активной странице рисуется заполненный прямоугольник, затем страница включается для просмотра на экране и активизируется другая страница на которой рисуется заполненный прямоугольник увеличенного размера. Процесс повторяется в цикле.

Практическое задание N 1. 64

1. С использованием двух видеостраниц составить программу вывода на экран картины: приближение гор разного цвета ( увеличивать размер гор ).

2. С использованием двух видеостраниц составить программу вывода на экран картины: приближение облаков разного цвета.

3. Создать "бегущую строку" в графическом режиме с выводом части буфера (надписи) на невидимую страницу и сменой видеостраниц.

1. 15. 5. 3. Мультипликация с управлением движения образа

Определяя смещение вновь выводимого образа в зависимости от кода нажатой клавиши, можно управлять движением фигуры. Обычно используют клавиши перемещения курсора. Приведем пример операторов, демонстрирующих принципы управляемого перемещения фигуры, с извлечением образа человечка из памяти:

dx:= 1; dy:= 1; { пошаговые перемещения по осям X и Y }

x:= 100; y:= 100; { начальные координаты смещаемого образа }

Xmax:= GetMaxX; Ymax:= GetMaxY;

Repeat

PutImage(x, y, P1^, 1); { выводим образ (запомненный ранее в P1^) }

xold:= x; yold:= y; { запоминаем координаты }

c:= readkey; { считываем код клавиши в переменную типа char }

if c = #0 then c:= readkey;

case c of { анализируем код нажатой клавиши }

#72: if y > 1 then y:= y - dy; { смещение вверх }

#75: if x > 2 then x:= x - dx; { смещение влево }

#80: if y < Ymax-100 then y:= y + dy; { смещение вниз }

#77: if x < Xmax-20 then x:= x + dx end; { смещение вправо }

PutImage(xold, yold, P1^, 1) {стираем образ }

Until c = #27; { при нажатии клавиши Esc перемещение прекратится }

108

Практическое задание N 1. 65

1. Перемещать по экрану стрелку-указатель под управлением курсорных клавиш с озвучиванием движения разной частотой звука в зависимости от направления перемещения.

2. Выполнить п. 1 так, чтобы стрелка всегда указывала направление своего перемещения.

Примечание: дополнить операторы перемещения стрелки в диагональных направлениях.