Способы создания движущихся изображений

 

1-ый способ. Дважды рисуя одно и то же изображение: первый раз цветом, отличным от цвета фона, второй раз – цветом фона.

2-ой способ. Используя процедуры и функции работы с видеопамятью. Изображение движется с помощью операции NormalPut.

3-ий способ. Используя процедуры и функции работы с видеопамятью. Изображение движется с помощью операции XorPut.

 

Пример программы движения шарика, падающего с левого верхнего угла экрана по диагонали в правый нижний.

 

1-ый способ.

Program Demo_1;

Uses

Graph,Crt;

Var

Driver,Mode,i:Integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

SetBkColor(Black);

For i:=25 to 300 do{схема движения шарика}

Begin

{рисуем шарик}

SetColor(Red); {цвет границы – красный}

Circle(i,i,15); {рисуем контур шарика}

SetFillStyle(SolidFill,Blue);

{стиль заполнения – синий фон}

FloodFill(i,i,Red); {закрасили}

{стираем шарик, закрашивая его цветом фона}

SetFillStyle(SolidFill,Black);

{стиль заполнения – черный фон}

FloodFill(i,i,Red); {закрасили}

SetColor(Black); {цвет границы – черный}

Circle(i,i,15); {нарисовали черный контур

на черном фоне, шарик исчез}

Delay(3000); {пауза}

end;

{чтобы шарик остался на экране, нарисуем его еще раз}

SetColor(Red);

Circle(i,i,15);

SetFillStyle(SolidFill,Blue);

FloodFill(i,i,Red);

ReadLn;

CloseGraph;

End.

 

Ой способ.

Program Demo_2;

Uses Graph,Crt;

Var

P :Pointer; {определяем нетипизированный указатель}

Size :Word;

Driver,Mode,i:Integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

{рисуем закрашенный шарик}

SetBkColor(Black);

SetColor(Red);

Circle(30,30,15);

SetFillStyle(SolidFill,Blue);

FloodFill(30,30,Red);

size:=ImageSize(5,5,50,50); {определяет объем памяти,}

{необходимый для сохранения изображения}

GetMem(P,Size); {выделяет память в динамически}

{распределяемой области размером в size байт}

GetImage(5,5,50,50,P^); {запоминаем изображение}

for i:=5 to 300 do

Begin

PutImage(i,i,P^,NormalPut); {выводим изображение}

Delay(3000); {пауза}

end;

ReadLn;

CloseGraph;

End.

 

Ий способ.

Program Demo_3;

Uses Graph,Crt;

Var

P :Pointer; {определяем нетипизированный указатель}

Size :Word;

Driver,Mode,i:Integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

{рисуем закрашенный шарик}

SetBkColor(Black);

SetColor(Red);

Circle(30,30,15);

SetFillStyle(SolidFill,Blue);

FloodFill(30,30,Red);

size:=ImageSize(5,5,50,50); {определяет объем памяти,}

{необходимый для сохранения изображения}

GetMem(P,Size); {выделяет память в динамически}

{распределяемой области размером в size байт}

GetImage(5,5,50,50,P^); {запоминаем изображение}

PutImage(i,i,P^,XorPut); {стираем изображение}

for i:=5 to 300 do

Begin

PutImage(i,i,P^, XorPut); {выводим изображение}

Delay(3000); {пауза}

PutImage(i,i,P^,XorPut); {стираем изображение}

end;

ReadLn;

CloseGraph;

End.