Из курса информатики 8 класса вам известно, что выделяют два способа создания компьютерной анимации: покадровая и расчетная (пример 17.4).
При создании покадровой (традиционной, простейшей) анимации прорисовываются все фазы движения объекта. При расчетной анимации прорисовываются только отдельные кадры, в которых объект располагается в начале движения (или в начале и конце движения), изображения в остальных кадрах (промежуточных) строятся с помощью компьютерных программ.
Эффект движения объекта появлялся в результате быстрой смены кадров на экране.
Используя компонент таймер, можно создать простейшую анимацию в среде C++Builder. Для этого нужно:
- Нарисовать объект.
- Запустить таймер.
- Пока таймер работает:
3.1. стереть объект; 3.2. рассчитать новое положение объект; 3.3. нарисовать объект.
Пример 17.5. Создать секундомер с движущейся секундной стрелкой.
Этапы выполнения задания
- Поместить на форму компоненты Timer, два компонента Image, и компонент Button.
- Изменить свойство Caption у компонента Button1 на «Пуск».
- Изменить свойство Enabled у компонента Timer1 на false.
- Задать размеры Image1 и Image2 такие как у рисунка с циферблатом. Компоненты разместить так, чтобы Image2 располагался точно над Image1.
- Изменить свойство Transparent у компонента Image2 на true.
- Написать обработчик событий OnCreate для формы, в котором:
6.1. Загрузить изображение с циферблатом в Image1. 6.2. На канве Image2 нарисовать стрелку, указывающую на 12.
- Написать обработчик события OnClick для компонента Button1, который будет запускать таймер.
- Написать обработчик событий OnTimer для компонента Timer, который будет стирать стрелку и прорисовывать ее в новом месте каждую секунду. Каждую секунду стрелка поворачивается на угол равный .
|
Пример 17.4. Способы создания компьютерной анимации:
Пример 17.5. Форма на этапе проектирования:
Переменные x, y, x_0, y_0 типа int и переменные ang и pi типа double описаны как глобальные.
Обработчик события OnClick для компонента Button1.
void __fastcall TForm1:: Button1Click(TObject *Sender)
{
Timer1 ->Enabled = true;
}
|
Обработчик события OnCreate для формы.
void __fastcall TForm1::FormCreate (TObject *Sender)
{
Image1 -> Picture -> LoadFromFile ("stopwatch.bmp");
x_0 = 123; y_0 = 181; ang = 0;
//прямоугольник белого цвета, для того
//чтобы прозрачным стал белый цвет
Image2 -> Canvas -> Pen -> Color = clWhite;
Image2 -> Canvas -> Rectangle
(0, 0, Image1 -> Width, Image1 -> Height);
//стрелка длиной 75 пикселей
//в начальном положении
x = x_0; y = y_0 - 75;
Image2 -> Canvas -> Pen-> Color = clBlack;
Image2 -> Canvas -> Pen -> Width = 2;
Image2 -> Canvas -> MoveTo(x_0, y_0);
Image2 -> Canvas -> LineTo(x, y);
pi = acos(-1.);
}
|
Обработчик события OnTimer для таймера.
void __fastcall TForm1::Timer1Timer (TObject *Sender)
{
//стирание стрелки белым цветом
Image2 -> Canvas -> Pen -> Color = clWhite;
Image2 -> Canvas -> Pen -> Width = 3;
Image2 -> Canvas -> MoveTo(x_0, y_0);
Image2 -> Canvas -> LineTo(x, y);
//вычисление координат конца стрелки
ang = ang + pi / 30;
x = x_0 + ceil(75 * sin(ang));
y = y_0 - ceil(75 * cos(ang));
//рисование стрелки в новом положении
Image2 -> Canvas -> Pen -> Color = clBlack;
Image2 -> Canvas -> Pen -> Width = 2;
Image2 -> Canvas -> MoveTo(x_0, y_0);
Image2 -> Canvas -> LineTo(x, y);
}
|
Работающее приложение:
|