ЗНАЕТЕ ЛИ ВЫ?

С элементами анимации и мультипликации типа «Тараканьи бега»



Рассмотрим пример проекта «Тараканьи бега», в котором одновременно используется движение объекта и изменение вида этого же объекта.

В этом проекте требуется организовать соревнование двух тараканов. Выигрывает бега тот, кто быстрее доберется до старта. Во время движения тараканов нужно показать различные виды расположения их ног при беге.

В графическом редакторе выполним изображения тараканов подобно тому, как изображено на рис. 22:

 

n1.bmp n2.bmp n3.bmp n4.bmp

 

m1.bmp m2.bmp m3.bmp m4.bmp

Рис. 22 Изображения тараканов

 

На форму в компоненты Image1 и Image2 загрузим рисунки тараканов перед стартом (рис. 23). Объекты Timer1 и Timer2 с интервалом 100 каждый будут отвечать за движение красного и желтого тараканов соответственно. Для отображения надписи с названием победителя забега будет служить помещенная на форму метка Label1.

 

Рис. 23 Графический интерфейс проекта «Тараканьи бега»

 

Сначала опишем бег красного таракана. Для задания его движения нужно изменять его координату по оси Ox или свойство Left на некоторое число. Чтобы скорость таракана могла меняться случайным образом, свойство Left следует увеличивать на случайное число:

Image1.Left:=Image1.Left + random(10).

В описанном операторе число может принимать любые случайные значения в диапазоне от 0 до 9.

При достижении красным тараканом правой границы бега должны прекратиться, и если он пришел первым, то в надпись Label1 следует вывести сообщение: «Победил красный». Эти действия можно описать с помощью следующего условного оператора:

If Image1.Left>(Form1.Width – Image1.Width) then

Begin

Timer1.Enabled:=false;

Timer2.Enabled:=false;

Label1.Caption:=’Победил красный’;

end;

Чтобы у таракана при беге менялось расположение ног, используем переменную-счетчик n, которая может принимать четыре значения. В зависимости от значения n в компонент Image1 будет загружаться соответствующий рисунок:

n:=n+1;

if n>4 then n:=1;

if n=1 then image1.Picture.LoadFromFile('n1.bmp');

if n=2 then image1.Picture.LoadFromFile('n2.bmp');

if n=3 then image1.Picture.LoadFromFile('n3.bmp');

if n=4 then image1.Picture.LoadFromFile('n4.bmp');

Таким образом, текст обработчика события OnTimer, описывающего движение красного таракана будет следующим:

 

Var
Form1: TForm1;
n,m: integer;
procedure TForm1.Timer1Timer(Sender: Tobject);
Begin
randomize;
n:=n+1;
Image1.Left:=Image1.Left+random(10);
if Image1.left> (Form1.Width – Image1.Width) then
Begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Label1.Caption:='Победил красный';
end;
if n>4 thenn:=1;
ifn=1 then image1.Picture.LoadFromFile('n1.bmp');
if n=2 then image1.Picture.LoadFromFile('n2.bmp');
if n=3 then image1.Picture.LoadFromFile('n3.bmp')
ifn=4 then image1.Picture.LoadFromFile('n4.bmp')
end;

 

Аналогично задается перемещение желтого таракана:

 

Var
Form1: TForm1;
n,m: integer;
procedure TForm1.Timer1Timer(Sender: Tobject);
Begin
randomize;
m:=m+1;
Image2.Left:=Image21.Left+random(10);
if Image2.left> (Form1.Width – Image2.Width) then
Begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Label1.Caption:='Победил желтый';
if m>4 thenm:=1;
ifm=1 then image2.Picture.LoadFromFile('m1.bmp');
if m=2 then image2.Picture.LoadFromFile('m2.bmp');
if m=3 then image2.Picture.LoadFromFile('m3.bmp')
ifm=4 then image2.Picture.LoadFromFile('m4.bmp')
if m>4 thenm:=1;
end;

 

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

Тогда возможен следующий текст программного кода:

 

Var
Form1: TForm1;
i,n,m,sc1,sc2,: integer;
procedure TForm1.Timer1Timer(Sender: Tobject);
Begin
randomize;
n:=n+1;
sc1:=sc1+1;
ifsc1>5 then
Begin
sc1:=0;
Timer1.Interval:=10+random(100)+random(100);
end;
Image1.Left:=Image1.Left+10;
if Image1.left> Form1.Width then
Begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Label1.Caption:='Победил красный';
end;
if n>4 thenn:=1;
ifn=1 then image1.Picture.LoadFromFile('n1.bmp');
if n=2 then image1.Picture.LoadFromFile('n2.bmp');
if n=3 then image1.Picture.LoadFromFile('n3.bmp')
ifn=4 then image1.Picture.LoadFromFile('n4.bmp')
end;
procedure TForm1.Timer2Timer(Sender: TObject);
Begin
randomize;
m:=m+1;
sc2:=sc2+1;
ifsc2>5 then
Begin
sc2:=0;
Timer2.Interval:=10+random(100)+random(100);
end;
Image2.Left:=Image2.Left+10;
if Image2.left> Form1.Width then
Begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Label1.Caption:='Победил желтый';
end;
if m>4 thenm:=1;
ifm=1 then image2.Picture.LoadFromFile('m1.bmp');
if m=2 then image2.Picture.LoadFromFile('m2.bmp');
if m=3 then image2.Picture.LoadFromFile('m3.bmp')
ifm=4 then image2.Picture.LoadFromFile('m4.bmp')
End.

 

Управление объектами





Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.234.255.5 (0.007 с.)