Графика (Координаты графических областей)

Ниже рассматриваемые функции ( 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

Всего доброго!

содержание | назад | вперед