Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

По учебной дисциплине

ЛЕКЦИЯ

Begin

Var

Const

End.

Begin

Case c of

Repeat

Begin

Var

r,d,m,ckx,cky:integer;

c:char;

r:=10;

d:=detect;

initgraph(d,m,'');

ckx:=getmaxx div 2;

cky:=getmaxy div 2;

setcolor(red);

circle(ckx,cky,r);

c:=readkey;

if c= #0 then

begin{начало управл.}

c:=readkey;

setcolor(black);

circle(ckx,cky,r);{закрашивает цветом фона}

#27:

closegraph;

halt;

end;

#77:ckx:= ckx+10; {вправо}

#75:ckx:= ckx-10; {влево}

#72: begin {вверх}

cky:= cky-10;

r:= r-10; {уменьшение рад.}

end;

#80: begin {вниз}

cky:= cky+10;

r:= r+10; {увеличение радиуса}

end;

end;{end case}

setcolor(5);

circle(ckx,cky,r);{рисует новое кр. цветом}

end;{конец упр.}

until c=#27;

closegraph;

Иногда при построении изображений простых движущихся фигур с использовании Line, Lineto и т. п., можно использовать процедуру SetWriteMode(Mode). Требуется установить режим вывода на экран(копирование или XOR) линии на экран Значения Mode определяется константами: CopyPut=0,XorPut=1. Если установлен режим 0, то пикселы, лежащие на отрезке прямой линии, переопределяются в пикселы на экране, и линия на экране имеет текущий цвет. Если установлен режим 1, то пикселы, образующие линию, имеют код цвета, образуемой операцией исключающего или кода текущего цвета и кода цвета пикселов на экране, через которые походит линия.

Движение с использованием видеостраниц.

Все графические построения производятся в видеопамяти. Память видеоадаптера разделена на видеостраницы. Их количество определяется видеорежимом. Каждая видеостраница хранит информацию обо всех точках экрана(там хранится информация о цвете каждой точки экрана).

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

Графические построения производятся в видеопамяти на активной видеостранице, а на экране отображается содержимое видимой страницы.

Изначально все действия производятся с 0 видеостраницей, которая является и активной, и видимой. Если направить вывод на невидимую страницу, то на экране ничего не изменится. Если скрытую страницу сделать видимой на экране, то изображение сразу появится на экране.

Для работы с видеостраницами используются две процедуры:

SetVisualPage(n:word); - делает страницу с номером n видимой на экране(устанавливает выполнение всех графических операций на странице с № n).

SetActivPage(n:word); - делает страницу c номером n активной.

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

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

Пример (имитация скачущего мяча).

На голубом экране желтый мяч отскакивает от одного края экрана к другому.

Для обеспечения двухстраничного режима, необходимо явно установить тип драйвера и видеорежим, т. к. d = detect обеспечивает только одностраничную организацию. Выберем d = Vga; m = VgaMed. В этом режиме графический экран имеет разрешение 640 х 350 и 2 видеостраницы. Исходя из этого на одной странице нарисуем мяч в координатах 320, 25, а на другой – 320, 325

Program main;

{ дв с видеостр mяч закрашенный}

uses graph,crt;

r1=20;

d,m,size,str,cx,cy,x1,x2,y1,y2:integer;

p:pointer;

c:char;

d:=9;

m:=vgamed;

initgraph(d, m’’);

{ рисуем на стр.№ 0 в верху экрана}

setbkcolor(blue);

setcolor(yellow);

cx:=getmaxx div 2;

cy:=getmaxy div 2-150;

circle(cx,cy,r1);

setfillstyle(1,yellow);

floodfill(cx,cy,yellow);

{подг. коорд. для выделения прямоуг. обл.}

x1:=cx-r1;

x2:=cx+r1;

y1:=cy-r1;

y2:=cy+r1;

size:=imagesize(x1,y1,x2,y2 ); {об. пам для хран.прямоуг обл.}

getmem(p,size);

getimage(x1,y1,x2,y2,p^);

setactivepage(1);

{рисуем мяч внизу на стр.№ 1}

putimage(x1,325-r1,p^,1);

freemem(p,size);

{организация смены в.страниц }

str:=0;

repeat

delay(12500);

str:=1-str;

setvisualpage(str);

if keypressed then c:=readkey;

until c=#27;

closegraph;

end.

 

<== предыдущая лекция | следующая лекция ==>
Движение с использованием динамической памяти | Фундаментальные свойства задачи оптимизации
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 120; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.021 сек.