§ 17. Анімацыя

17.2. Найпростая анімацыя

З курсу інфарматыкі 8-га класа вам вядома, што вылучаюць два спосабы стварэння камп'ютарнай анімацыі: пакадравая і разліковая (прыклад 17.4).

Пры стварэнні пакадравай (традыцыйнай, найпростай) анімацыі прамалёўваюцца ўсе фазы руху аб'екта. Пры разліковай анімацыі прамалёўваюцца толькі асобныя кадры, у якіх аб'ект размяшчаецца ў пачатку руху(або ў пачатку і канцы руху), малюнкі ў астатніх кадрах (прамежкавых) будуюцца з дапамогай камп'ютарных праграм.

Эфект руху аб'екта з'яўляўся ў выніку хуткай змены кадраў на экране.

Выкарыстоўваючы кампанент таймер, можна стварыць найпростую анімацыю ў асяроддзі C++Builder. Для гэтага трэба:

  1. Намаляваць аб'ект.
  2. Запусціць таймер.
  3. Пакуль таймер працуе:
    3.1. сцерці аб'ект;
    3.2. разлічыць новае становішча аб'екта;
    3.3. намаляваць аб'ект.

Прыклад 17.5. Стварыць секундамер з секунднай стрэлкай, якая рухаецца.

Этапы выканання задання

  1. Змясціць на форму кампаненты Timer, два кампаненты Image, і кампанент Button.
  2. Змяніць уласцівасць Caption у кампанента Button1 на «Пуск».
  3. Змяніць уласцівасць Enabled у кампанента Timer1 на false.
  4. Задаць памеры Image1 і Image2 такія як у малюнка з цыферблатам. Кампаненты размясціць так, каб Image2 размяшчаўся дакладна над Image1.
  5. Змяніць уласцівасць Transparent у кампанента Image2 на true.
  6. Напісаць апрацоўшчык падзей OnCreate для формы, у якім:
    6.1. Загрузіць малюнак з цыферблатам у Image1.
    6.2. На канве Image2 намаляваць стрэлку, якая ўказвае на 12.
  7. Напісаць апрацоўшчык падзеі OnClick для кампанента Button1, які будзе запускаць таймер.
  8. Напісаць апрацоўшчык падзей 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

    (00, 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);

}

 Дадатак у час працы: