З курсу інфарматыкі 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 для кампанента Таймер, які будзе сціраць стрэлку і прамалеўваць яе ў новым месцы кожную секунду. Кожную секунду стрэлка паварочваецца на вугал роўны
.
|
Прыклад 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);
}
|
Дадатак у час працы:

|