4. ЭКРАННЫЕ СТРАНИЦЫ Построения с помощью графических операторов происходят недостаточно быстро, поэтому при необходимости можно хранить изображения на так называемых экранных страницах и в нужный момент целиком выводить их на экран.
В каждом графическом экране существуют активная и видимая страницы. Активной является страница, на которой производится построение изображения, вывод текста. Видимой является страница, отображаемая на мониторе компьютера. По умолчанию номера активной и видимой страниц совпадают, поэтому, вы сразу наблюдаете процесс построения изображения. Но если вы укажете различные номера активной и видимой страниц, то можно достичь эффекта мультипликации. Например, в то время, пока на видимой странице существует графическое изображение, на активной подготавливается новое изображение, которое при переключении страниц "мгновенно" выводится на экран.
Номера страниц устанавливаются оператором SCREEN:
SCREEN n, , a, v
где n - уже известный вам номер режима,
а - номер активной страницы,
v - номер видимой страницы.
Обратите внимание, между номером режима и номером активной страницы стоят две запятые!
Путем изменения номера отображаемой видеостраницы можно достичь эффекта перемещения образов на экране (мультипликация). Задачей мультипликации является отображение видимой страницы с полностью сформированным графическим образом, в то время как на одной или более активных страницах происходит процесс формирования графических образов. Описанный процесс иллюстрируется следующим фрагментом программы:
screen 9, ,1,2
……………….
‘здесь осуществляется построение графических образов в активной ‘(1) странице, в то время, как отображается содержимое второй ‘страницы.
screen 9, ,2,1
‘страницы меняются местами
Можно использовать и более чем две страницы, добиваясь таким образом, более сложных эффектов движения. Однако, не увлекайтесь количеством страниц, т.к. могут возникнуть проблемы с памятью компьютера. 5. КОПИРОВАНИЕ БЛОКОВ ИЗОБРАЖЕНИЯ
5.1 Копирование блоков изображения
Если вы используете одинаковые рисунки, или текст на разных страницах, в разных программах, то можно нужный кусочек изображения (прямоугольной формы) скопировать, а затем поместить в другое место.
Таким способом можно заставить двигаться рисунок или скопировать часть изображения с одной страницы на другую и т.д.
Для этих целей существует команда, которая считывает графические образы с экрана в массив оперативной памяти компьютера
GET(Xl,Yl)-(X2,Y2), имя_массива
где (Xl,Yl) - (X2,Y2) - прямоугольная область, определяющая координату левого верхнего и правого нижнего углов копируемой области
имя_массива - это имя переменной типа числовой массив, в котором будет сохраняться изображение. Массив должен быть предварительно объявлен в программе и его размер должен быть достаточным для хранения графического образа.
Остановимся на этих требованиях подробнее
Для того чтобы объявить числовой массив воспользуйтесь командой
DIM имя(N)
по этой команде в оперативной памяти компьютера отведется место для хранения массива имя размерностью N. Если в процессе выполнения программы будет попытка записать в описанный массив данных больше, чем размерность N , то появится ошибка SUBSCRIPT OUT OF RANGE (выход за пределы массива). Тогда следует увеличить число N.
При использовании команды GET размер, необходимый для хранения изображения можно примерно рассчитать. Для этого вначале рассчитайте ширину X и высоту Y вашего изображения, дальше определите по таблице параметры а и b для вашего графического изображения и воспользуйтесь
Screen
| a
| b
| 1
| 2
| 1
| 2
| 1
| 1
| 7
| 1
| 4
| 8
| 1
| 4
| 9
| 1
| 4
| 10
| 1
| 2
| 11
| 1
| 1
| 12
| 1
| 4
| 13
| 8
| 1
| формулой: где INT -целая часть числового выражения. Например: Необходимо скопировать часть экрана с координатами (10,10)-(35,76) в числовой массив.
Вначале определим размеры копируемой области: Х=35-10=25 у=76-10=66
Теперь рассчитаем размер числового массива (для screen 9):
Теперь надо описать графические построения на этом участке, определить числовой массив размером 530 и скопировать изображение с помощью оператора
GET
Приведем примерный фрагмент программы.
screen 9
color 2,15
‘здесь описываются построения
dim mas(530)
get(10,10)-(35,76),mas
………..
Теперь изображение содержится в переменной mas и его можно будет поместить в другое место экрана, на другую страницу, заставить перемещаться по экрану и т.д. Следует отметить, что при этой операции содержимое самого изображения с экрана не исчезает. Если необходимо убрать этот кусочек с экрана, то рекомендуем или очистить экран целиком оператором CLS (если на экране нет каких-либо других нужных изображений) или нарисовать на этом же месте закрашенный прямоугольник цветом 0.
В нашем примере: line (10, 10)-(35,76),0,bf
5.2 Восстановление графического образа из оперативной памяти на экране
Когда уже существует образ в массиве, его можно в любой момент вызвать обратно на экран, поместив его левый верхний угол в любую точку экрана. Для этого служит команда:
PUT (Х, Y), имя_массива, операция
где (X.Y) - координаты вывода образа на экран,
имя_массива - имя переменной, в которой хранится образ,
операция - определяет функцию, используемую для объединения пересылаемого образа с уже существующим изображением на экране монитора. Может принимать значения PSET, PRESET, AND, OR, XOR. В задачах мультипликации в основном используются операции PSET и XOR .
Операция XOR установлена по умолчанию, т.е. ее можно вовсе не указывать. Если операции GET и PUT производятся над образом в одной и той же области экрана, то текущее изображение на экране исчезает. Значит таким способом также можно уничтожить созданное изображение.
Например:
dim mas(530)
get(10,10)-(35,76), mas
put (10,10), mas, xor
Эффекта движения можно достичь, используя операцию PSET, изменяя циклично координаты выводимого образа.
Например: Следующий фрагмент программы создает образ круга на экране, круг двигается по диагонали сверху вниз SCREEN 9
COLOR 2, 14
CIRCLE (100, 100), 45, 5
PAINT (100, 100), 3, 5
DIM KRUG (10000)
GET (53, 53)-(147, 147), KRUG
PUT (53, 53), KRUG
FOR I = 1 TO 300
PUT (I, I / 2), KRUG, PSET
NEXT Таким способом можно заставить двигаться по экрану любую сложную фигуру по любой траектории, изменив закон движения.
Для того чтобы старое изображение не "пачкало" экран, помните о том, что желательно прямоугольную область под образ отводить на 2-3 точки больше, чем реальный размер рисунка (по всем сторонам: сверху, снизу, справа, слева).
|