logo search
Posobie_Ravino_Atamanov

2.5.5.5. Создание анимации

Каждый студент примерно представляет себе принципы создания анимации: совокупность множества кадров, отличающихся немного друг от друга. Это при быстром поочередном просмотре кадров и создает иллюзию движения. В своей работе вряд ли придется рисовать с помощью Delphi мультфильмы. Для этого имеются совершенно другие инструменты. Но некоторые простые анимации ‑ оживление изображений, иногда желательно делать. Например, при создании какой-нибудь обучающей программы можно оживить какие-то схемы или условные изображения механизмов, чтобы показать в движении взаимодействие их отдельных составляющих.

В качестве примера создадим анимацию движения объекта на колесах по дороге (рисунок 10).

Рисунок 10 – Окно О программе с анимированным изображением

Порядок создания следующий.

Открываем новое приложение. Переносим на форму компоненты Image (страница Additional) и Timer (страница System). Анимация будет запускаться при создании формы (событие Create) и воспроизводится непрерывно.

Таймер будет задавать темп смены кадров. Следует задать значение свойства Interval таймера равным 100 (поскольку интервал задается в миллисекундах, то это значение соответствует 0,1 секунды). Размещение компонентов закончено. Теперь надо ввести текст программы. Ее раздел implementation имеет следующий вид:

const

h=52; {длина корпуса}

b=25; {высота корпуса}

yz=60; {высота (сверху вниз) расположения дороги}

rk=7; {радиус колеса}

var

xn:integer;

Procedure draw1;

begin

with FormAbout.Image1.Canvas do

begin

rectangle(xn,yz-2*rk-b,xn+h,yz-2*rk);{корпус машины}

ellipse((xn+h div 4-rk),(yz-2*rk),

(xn+h div 4+rk),yz); {одно колесо машины}

ellipse((xn+h div 4-rk+h div 2),(yz-2*rk),

(xn+h div 4+rk+h div 2),yz);{другое колесо}

end;

end;

procedure clean;

begin

FormAbout.image1.Canvas.rectangle(0, 0, FormAbout.image1.Width, FormAbout.image1.Height);

end;

procedure doroga;

begin

with FormAbout.image1.Canvas do

begin

pen.Width:=4;{перо толщиной 4 единицы}

moveto(0,yz+2);{перемещаем курсор в указанную точку}

lineto(FormAbout.Image1.Width,yz+2);{рисуем линию}

pen.Width:=1; {перо толщиной 1 единица}

end;

end;

procedure TFormAbout.FormCreate(Sender: TObject);

begin

xn:=1

end;

procedure TFormAbout.Timer1Timer(Sender: TObject);

begin

clean;

doroga;

draw1;

xn:=xn+10;

if xn>=(image1.Width-h) then xn:=1;

end;

Формирование анимации заключается в использовании (в данном случае) трех пользовательских подпрограмм clean, doroga и draw1. Процедура clean очищает окно от всех объектов. Процедура doroga создает горизонтальную линию, соответствующей дороге, по которой движется объект. Процедура draw1создает сам движущийся объект (прямоугольный корпус и два колеса). Следующий объект рисуется со смещением по горизонтали на 10 единиц. Далее кадры повторяются с интервалом в 0,1 секунды (свойство таймера) до тех пор, пока форма не будет закрыта.

Оператор

if xn>=(image1.Width-h) then xn:=1;

позволяет отрисовывать изображение заново, когда объект достиг правой границы окна.