Графика (Координаты графических областей)
Ниже рассматриваемые функции ( VIEW, WINDOW , PMAP ) очень полезны и в ряде случаев облегчают программирование.
VIEW
Данная функция поможет установить область рисования. В отличии от консольной команды View Print, которая устанавливает область по всей ширине окна, графическая команда View более гибкая. С помощью ее можно точно выделить прямоугольник. Чем хороша такая возможность?
- установив конкретный небольшой участок, затрачивается меньше ресурсов компьютера для рисования. То, что будет рисоваться вне определенного с помощью команды View прямоугольника, будет отсекаться.
- можно установить две области: одну для текста, другую для графики одновременно, при чем обновлять только то окно, которое требуется на данный момент
- можно установить несколько различных областей для графики и переключаться по надобности.
Синтаксис функции:
View [SCREEN] ( x1, y1 )-( x2, y2 )[, [ color ] [, border ]]]
- screen - если указано это ключевое слово, то рисование по координатам X1,X2,Y1,Y2 будет относительно общего экрана, а не выделенной области.
- x1, y1 - координаты выделяемой области рисования верхнего левого угла
- x2, y2 - координаты выделяемой области рисования нижнего правого угла
- color - цвет заполнения выделенной области при начальной инициализации.
- border - цвет рамки (бордюра) экрана.
Теперь, когда мы рассмотрели обе команды VIEW , я хотел бы дополнить информацию по функции CLS. Она может вызываться без параметров, что мы и делали во всех примерах, но так же функция имеет один параметр: режим очистки. За счет этого параметра можно очищать:
0 - весь экран, независимо от выделенных областей
1 - только выделенную графическую область
2 - только выделенную текстовую область
Пример_1 (выделенная графическая область):
Dim As Any Ptr img Dim As Single X=10,Y=10 Screen 15,32 img=ImageCreate(50,50) Line img,(10,10)-Step (30,30),&hff,BF View (50,50)-(350,250),,&hFFFFFF Do If Multikey(&h48) Then ' стрелка вверх Y-=.1 Endif If Multikey(&h50) Then ' стрелка вниз Y+=.1 Endif If Multikey(&h4B) Then ' стрелка влево X-=.1 Endif If Multikey(&h4D) Then ' стрелка вправо X+=.1 Endif Sleep(1) Cls(1) Put (X,Y),img Loop Until Multikey(1)'Esc выход
Это далеко не самый хороший пример для рисования спрайта, но для функции View подойдет. Вы наверно заметили некоторое мерцание при движении прямоугольника. В следующей статье мы рассмотрим функции, решающие проблему с мерцанием.
Пример_2(графическая и текстовая область):
Dim As Any Ptr img Dim As Single X=10,Y=10 Screen 15,32 img=ImageCreate(50,50) Line img,(10,10)-Step (30,30),&hff,BF View (50,50)-(350,150),,&hFFFFFF View Print 25 To 26 Print Tab(22), "FreeBasic" Do If Multikey(&h48) Then ' стрелка вверх Y-=.1 Endif If Multikey(&h50) Then ' стрелка вниз Y+=.1 Endif If Multikey(&h4B) Then ' стрелка влево X-=.1 Endif If Multikey(&h4D) Then ' стрелка вправо X+=.1 Endif Sleep(1) Cls(1) Put (X,Y),img Loop Until Multikey(1)'Esc выход
Как видите, нам даже не нужно помещать надпись в цикл, она не обновляется при обновлении графического экрана.
WINDOW
Функция переводит экран или выделенную область в другой режим собственных координат с вещественными (дробными) числами. Для того, чтобы сбросить настройки координат, достаточно вызвать функцию без параметров.
Синтаксис:
Window [ [SCREEN] ( x1, y1 )-( x2, y2 ) ]
- SCREEN - Если используется это ключевое слово, то координаты Y будут увеличиваться сверху вниз
- x1, y1 - координата нижнего левого угла
- x2, y2 - координата правого верхнего угла
Пример:
Screen 1 Window ( -5, -5 ) - ( 5, 5 ) Line (-5,5)-(0,0),2 Line (0,0)-(5,5),2 Paint (0,1),2 Sleep
Как видите не надо знать размеры экрана, достаточно переопределить систему координат и вы уже легко чертите линию в середину экрана. В нашем случае середина экрана 0,0
PMAP
При использовании функции WINDOW , может понадобиться преобразование координат из одной системы координат в другую. Как раз для этого и нужна функция PMAP.
Синтаксис:
PMap ( coord , flag ) As Single
- coord - координата X или Y в любой системе координат
- Flag - флаг , позволяющий определять из какой системы координат и какую
ось координат надо преобразовывать. Может быть:
- 0 - преобразует координату Х из логической величины в физическую
- 1 - преобразует координату Y из логической величины в физическую
- 2 - преобразует координату Х из физической величины в логическую
- 3 - преобразует координату Y из физической величины в логическую
Пример (из справки):
Screen 12 '640x480 Window Screen (0, 0)-(100, 100) Print "Logical x=50, Physical x="; Pmap(50, 0) Print "Logical y=50, Physical y="; Pmap(50, 1) Print "Physical x=160, Logical x="; Pmap(160, 2) Print "Physical y=60, Logical y="; Pmap(60, 3) Sleep
Всего доброго!
содержание | назад | вперед