Изменение форм и видов объектов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Изменение форм и видов объектов



 

Следующим видом анимации является изменение объектов.

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

 

Пример. Создать проект, в котором демонстрируются различные фазы луны.

 

Для оформления графического интерфейса проекта поместим на форму таймер и три компонента TImage: в Image1 загрузим изображение круглой луны, в Image2 – половины луны и в Image3 – месяца (рис. 14). Все три компонента наложим друг на друга так, чтобы они практически совпадали (рис. 15) и установим свойство Visible равным False.

 

Рис. 14 Фазы луны

 

Рис. 15 Графический интерфейс окна

 

Введем переменную-индикатор n целого типа. Эта переменная будет соответствовать различным фазам луны. При n = 1 выводится изображение полной луны (Image1.Visible = true), при n = 2 – половины луны (Image2.Visible = true), при n = 3 – месяца (Image3.Visible = true). Если n = 4, то луна на небе вообще отсутствует. Переменная-счетчик может менять свои значения с помощью оператора n:= n+1.

Обработчик события OnTimer будет иметь вид:

 

procedureTForm1.Timer1Timer(Sender: TObject);
var n: integer;
Begin
n: = n+1;
if n = 1 then begin
Image1.Visible:=true;
Image2.Visible:=false;
Image3.Visible:=false;
end;
if n=2 then begin
Image1.Visible:= false;
Image2.Visible:= true;
Image3.Visible:=false;
end;
if n=3 then begin
Image1.Visible:= false;
Image2.Visible:= false;
Image3.Visible:= true;
end;
if n=4 then begin
Image1.Visible:=false;
Image2.Visible:=false;
Image3.Visible:=false;
end;
ifn>4thenn:=0;
end;

 

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

 

Рис. 16 Графический интерфейс окна.

 

При n = 1 в Image1 загружается файл с полной луной (1.bmp), при n = 2 – с половиной луны (2.bmp), при n = 3 – с месяцем (3.bmp).

Обработчик события OnTimer будет иметь следующий вид:

 

procedureTForm1.Timer1Timer(Sender: TObject);
var n: integer;
Begin
n: = n+1;
if n=1 then Image1.Picture.LoadFromFile('1.bmp')
if n=2 then Image1.Picture.LoadFromFile('2.bmp')
if n=3 then Image1.Picture.LoadFromFile('3.bmp')
if n>3 then n:=0
end;

 

Движение объектов и изменение их форм можно совместить в одном проекте. Рассмотрим пример такой программы.

 

Пример.Создадим проект «Зарядка», в котором помещенный на форму человечек выполняет следующие упражнения: 1. поднимает и опускает руки; 2. приседает; 3. играет с мячом.

 

В данном проекте будет использоваться и изменение вида объекта (человека), и движение объекта (мяча).

Для создания графического интерфейса проекта нарисуем в графическом редакторе Paint следующие изображения:

1. изображение человечка с опущенными руками – 1.bmp (рис. 17, а);

2. изображение человечка с поднятыми руками – 2.bmp (рис. 17, б);

3. изображение приседающего человека – 3.bmp (рис. 17, в);

4. изображение мяча – ball.bmp (рис. 17, г);

5. изображение подставки – floor.bmp (рис. 17, д).

 

 

а) б) в) г) д)

Рис. 17 Изображения, используемые в проекте.

 

Начнем с программирования первого упражнения. Для этого поместим на форму 3 объекта TImage со следующими свойствами:

- У объекта Image1 в свойство Picture загрузим рисунок 1.bmp; transparent = true; visible = true; stretch = true.

- У объекта Image2 в свойство Picture загрузим рисунок 2.bmp; transparent = true; visible = false; stretch = true.

- У объекта Image3 в свойство Picture загрузим рисунок floor.bmp; transparent = true; visible = true; stretch = true.

При этом изображения Image1 и Image 2 должны практически точно накладываться друг на друга.

Для организации повторения первого упражнения поместим на форму компонент Timer1 с интервалом 500. В результате получим графический интерфейс подобно тому, как изображено на рис. 18.

 

Рис. 18 Графический интерфейс проекта «Зарядка»

для выполнения первого упражнения

 

Далее поместим на форму еще один объект TImage – Image4, в который загрузим изображение приседающего человечка (3.bmp). Свойство Visible у этого объекта должно равняться false. Чтобы организовать повторение приседаний, разместим на форме еще один таймер Timer2 с интервалом 500.

 

Рис. 19 Графический интерфейс проекта «Зарядка»

для выполнения двух упражнений

 

Аналогично добавим на форму изображение мяча в компоненте Image5 и компонент Timer3 с интервалом 100 для работы с мячом (рис. 20).

 

Рис. 20 Графический интерфейс проекта «Зарядка»

 

Создадим обработчик события OnTimer для компонента Timer1. Чтобы получить эффект мультипликации нужно организовать чередование видимости изображений человека с опущенными и поднятыми руками. Для этого введем переменную-индикатор n, которая может принимать последовательно значения 1 и 2. Если n = 1, то виден человек с опущенными руками. Если n = 2, то виден человек с поднятыми руками.

Текст программы обработчика события для Timer1 будет следующим:

 

Var
Form1: TForm1;
n:integer;
procedure TForm1.Timer1Timer(Sender: TObject);
Begin
n:=n+1;
if n>2 then n:=1;
if n = 1 then
Begin
Image1.Visible:=true;
Image2.Visible:=false;
end;
if n = 2 then
Begin
Image2.Visible:=true;
Image1.Visible:=false;
end;
end;

 

Зададим число повторов (15 раз) для первого упражнения и организуем переход ко второму упражнению. Для этого введем еще одну переменную-индикатор k. При k =15 первый таймер должен прекратить свою работу, а второй таймер – начать.

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

 

Var
Form1: TForm1;
n, k: integer;
procedure TForm1.Timer1Timer(Sender: Tobject);
Begin
n:=n+1;
k:=k+1;
if n>2 then n:=1;
if n = 1 then
Begin
Image1.Visible:=true;
Image2.Visible:=false;
end;
if n = 2 then
Begin
Image2.Visible:=true;
Image1.Visible:=false;
end;
if k =15 then
Begin
Timer1.Enabled:=false;
Timer2.Enabled:=true;
end;
end;

 

Аналогично составляется обработчик события для второго таймера. Только здесь при f = 15 должно исчезнуть изображение приседающего человека и появиться изображение мяча и человека с опущенными руками.

 

Var
Form1: TForm1;
n, k, g, f:integer;
procedure TForm1.Timer2Timer(Sender: TObject);
Begin
g:=g+1;
f:=f+1;
if g>2 then g:=1;
if g = 1 then
Begin
Image1.Visible:=true;
Image4.Visible:=false;
end;
if g = 2 then
Begin
Image4.Visible:=true;
Image1.Visible:=false;
end;
if f =15 then
Begin
Timer2.Enabled:=false;
Timer3.Enabled:=true;
Image4.Visible:= false;
Image5.Visible:= true;
Image1.Visible:=true;
end;
end;

 

Создадим обработчик для третьего таймера, который отвечает за движение мячика. Мяч должен лететь вниз, отскакивать от пола и возвращаться в исходное положение. Организовать движение мяча можно с помощью следующей конструкции: Image5.Top:=Image5.Top + 40. Если верхняя граница мяча плюс его высота будет больше, чем верхняя граница подставки, то свойство Image5.Top должно принять начальное значение. Число повторов упражнения с мячом задается аналогично.

Текст программы обработчика события для Timer3 будет следующим:

 

Var
Form1: TForm1;
n, k, g, f, m:integer;
procedure TForm1.Timer3Timer(Sender: TObject);
Begin
m:=m+1;
Image5.Top:=Image5.Top+40;
if(Image5.Top+Image5.Height)>Image3.Top thenImage5.Top:=130;
if m =15 thenTimer3.Enabled:=false;
end;

 

Проект «Зарядка» можно усложнить, добавив новые упражнения.

 

Задания

 

1. Создать проект моделирования движения человека:

a. идущего;

b. бегущего;

c. танцующего;

d. выполняющего сигнализацию флажками;

e. играющего на гитаре.

2. Создать проект, в котором распускается цветок.

3. Создать проект, в котором два человека бросают друг другу мячик. Когда мячик подлетает к человечку, он должен поднять руки, чтобы отбить мяч. Затем человек опускает руки.

Изменение размеров объектов

 

Размеры объектов в Delphi определяются свойствами Width (Ширина) и Height (Высота). Чтобы задать другие размеры у компонентов, необходимо установить новые значения этих свойств. Например, команда Image1.Width:= Image1.Width + 5 увеличивает ширину объекта Image1 на 5 пикселей.

 

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

 

Оформите графический интерфейс проекта подобно тому, как показано на рис. 21. В компонент Image1 помещено изображение дороги, в Image2 – изображение автомобиля, в Image3 – изображение дерева. Чтобы дерево могло увеличивать свои размеры, у объекта Image3 следует обязательно установить свойство Stretch (Растяжение) равным True.

Текст процедуры обработчика события OnTimer будет следующим:

 

procedure TForm1.Timer1Timer(Sender: TObject);
Begin
Image3.Width:=Image3.Width+5;
Image3.Height:=Image3.Height+5;
Image3.left:=Image3.Left-3;
If (Image3.Top+Image3.Height)>(Image1.Top) then
Begin
Image3.Left:=30;
Image3.Width:=65;
Image3.Height:=90;
end;
end;

 

Рис. 21 Графический интерфейс окна

 

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

 

Пример программы движения объектов



Поделиться:


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

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