69107

Анімаційні ефекти

Лекция

Информатика, кибернетика и программирование

Найпростіший спосіб реалізації цього ефекту полягає в тому щоб намалювати зображення певним кольором а потім приховати його шляхом повторного малювання в тих самих графічних координатах кольором фону. Наступного разу зображення відтворюється вже в нових координатах.

Украинкский

2014-09-30

46.5 KB

0 чел.

Лекція 16. Тема: Анімаційні ефекти

1. Анімаційні ефекти

Під час розробки анімаційних програм потрібно створювати ефект пересування графічних об'єктів. Найпростіший спосіб реалізації цього ефекту полягає в тому, щоб намалювати зображення певним кольором, а потім приховати його шляхом повторного малювання в тих самих графічних координатах кольором фону. Наступного разу зображення відтворюється вже в нових координатах. Великі за розміром зображення пересуватимуться у такий способ надто повільно. Значно вищої швидкості, а отже і якості анімації можна досягти за допомогою копіювання зображень в оперативну пам'ять і виведення на екран їх копій у нових графічних координатах. Оскільки копія зображення зберігається в оперативній пам'яті, можливе її багаторазове виведення.

Процедури і функції, що застосовуються для створення анімаційних ефектів, наведені у табл. 5.1. Процедура GetImage (x1, y1, x2, y2: Integer; var BitMap) зберігає в пам'яті зображення, оточене прямокутником, лівим верхнім кутом якого є точка (х1,у1), а правим нижнім - точка (х2, у2). Параметр BitMap - це динамічна змінна, що в ній зберігатиметься зображення. Покажчик на змінну BitMap, як правило, нетипізований. На екран зображення виводиться за допомогою процедури PutImage (x, y: Integer; var BitMap; BitBlt: Word). Координатами лівої верхньої точки зображення є значення параметрів х і у. Параметр BitBlt визначає спосіб взаємодії нової копії зображення із зображенням, що вже є на екрані. Взаємодія здійснюється за допомогою логічних операцій, які застосовуються до кожного біта копії та оригіналу зображення. Значенням параметра BitBlt є одна із таких констант:

const

NormalPut=0;  {заміна наявного зображення на копію}

XorPut=1;  {операція виключного «або»}

OrPut=2;  {об’єднувальне «або»}

AndPut=3;  {логічне «і»}

NotPut=4;  {інверсія зображення}

Логічні операції над зображенням дають такі результати. У випадку використання константи NormalPut зображення на екрані знищується і на цьому місці відображається копія з оперативної пам'яті. В разі вибору константи NotPut буде виведено копію зображення в інверсному коді: так, код white (1510 = 11112) замінюється кодом black (010 = 00002), код red (410 = 01002) — кодом lightCyan (1110 = 10112). Використання константи  XorPut дає можливість видаляти зображення в тих точках екрана, де розміщено його оригінал. Якщо цю операцію застосувати двічі до тих самих координат екрана, то зображення не зміниться.

Приклад 5.5.

Створимо програму, що імітує рух місяця на зоряному небі. Коли зображення місяця сягає межі екрана, напрям його руху змінюється. Один із можливих станів екрана під час роботи програми зображено на рис. 5.4.

Program ex5_4;     {місяць на небі, зіроньки сяють}

uses crt, graph;

var dr, m: integer;     {графічний драйвер та режим}

     x, y,      {координати об’єкта під час руху}

     dx, dy: integer;     {приріст координат}

     ptr: pointer;  {покажчик на область пам’яті, де зберігаються зображення}

size: integer; {розмір необхідної для збереження зображення пам’яті}

     leftX, lefty,     {координати лівого верхнього і}

     rightX, rightY: integer;  {правого нижнього кутів прямокутника, в який вписано зображення}

     i: integer;      {параметр циклу}

{--------------------------------- відображення зоряного неба ---------------------------------}

procedure Sky;

begin

  randomize;     {ініціалізація генератора випадкових чисел}

  SetBkColor (1);     {визначення кольору фону}

  SetColor (14);     {колір зірок}

  for i:=0 to 200 do     {відображення зірок}

    Circle (random(640), random(480), 1);

end;

{--------------------------------- відображення місяця на небі ---------------------------------}

procedure Moon;

begin

  SetColor (14);

  Arc (450, 100, 270, 90, 50);

  Arc (390, 100, 320, 40, 80);

  SetFillStyle (1, 14);

  FloodFill (480, 100, 14);

end;

{----------------------- збереження зображення у динамічній пам’яті ----------------------}

procedure SaveClip;

begin

  leftX:=445;       {координати прямокутника}

  leftY:=45;       {у який вписано місяць}

  rightX:=505;

  rightY:=155;

  size:=imagesize (leftX, lefty, rightX, rightY);

  getmem (ptr, size);      {виділити пам’ять}

  getimage (leftX, lefty, rightX, rightY, ptr^);  {зберегти зображення в пам’яті }

  putimage (leftX, lefty, ptr^, xorput);   {приховати зображення}

end;

{--------------------------------- рух місяця ---------------------------------}

procedure Move;

begin

  x:=leftX; y:=lefty;      {стартові координати}

  dx:=10; dy:=10;      {приріст координат}

  repeat       {зсув зображення}

     x:=x+dx;       {зміна координат місяця}

     y:=y+dy;

     putimage (X, Y, ptr^, xorput);   {зобразити фігуру в нових координатах}

     delay (2000);      {затримати рух}

     putimage (X, Y, ptr^, xorput);   {сховати фігуру в старих координатах}

     if (x>640) or (x<0)    {якщо фігура сягнула межі екрана,}

        then dx:=-dx     {змінити напрям її руху}

        else

           if (y<0) or (y>480) then dy:=-dy;

  until keypressed;

end;

{--------------------------------- основна програма ---------------------------------}

begin

  dr:=Detect;

  InitGraph (dr, m, ‘ ’);

  Sky;

  Moon;

  SaveClip;

  Move;

end.

Контрольні питання

1.Анімаційні ефекти


 

А также другие работы, которые могут Вас заинтересовать

63784. Закон “О медицинском страховании граждан в Российской Федерации”. Добровольное медицинское страхование 40.5 KB
  Для реализации закона разработаны и утверждены положения о медицинских страховых организациях о порядке выдачи лицензий на право заниматься медицинским страхованием базовая программа обязательного медицинского страхования...
63785. Лицензирование и аккредитация медицинских учреждений 24.5 KB
  Учреждения ЛПУ У ЛПУ появились дополнительные источники финансирования: бюджетные средства средства органов управления здравоохранения если участвуют в целевых и комплексных программах; средства страховых компаний ОМС и ДМС...
63786. Статистический метод 22 KB
  Медицинская статистика подразделяется на два раздела: статистика здоровья населения и статистика здравоохранения. Медицинская статистика используя математические законы позволяет выявлять закономерности в изучаемых явлениях подтверждать...
63787. Статистическое исследование и его этапы 23.5 KB
  Составление плана и программы исследования: формулирование цели и задач исследования в соответствии с рабочей гипотезой; определение и подбор статистической совокупности; определение единицы наблюдения; выбор вида статистического исследования...
63788. Статистическая совокупность, ее свойства 21 KB
  Статистическая совокупность группа относительно однородных элементов единиц наблюдения в конкретных условиях времени и пространства. В зависимости от охвата единиц наблюдения в связи с целью исследования статистическая совокупность может быть генеральной и выборочной.
63789. Распределение признака в статистической совокупности. Альтернативный анализ. Относительный величины 25.5 KB
  Виды относительных величин:1 экстенсивные показатели; 2 интенсивные показатели;3 коэффициенты соотношения; 4 коэффициенты наглядности. Экстенсивные показатели характеризуют структуру изучаемого явления отношение части к целому то есть определяют долю удельный вес процент части в целом принятом за 100. Интенсивные показатели отражают частоту уровень распространенности явления в своей среде. Показатели соотношения характеризуют отношение между двумя разнородными биологически не связанными между собой статистическими совокупностями...
63790. Вариационный анализ. Среднии величины 25 KB
  Нормы и нормативы используемые для планирования амбулаторно поликлинической и стационарной помощи средние величины. Виды средних величин: средняя арифметическая простая М сумма всех значений признака деленная на число наблюдений...
63791. Репрезентативность признака. Оценка достоверности результатов исследования 23 KB
  Изучение генеральной совокупности значительно трудоемко. Поэтому в исследованиях применяют выборочные наблюдения охватывающие только часть генеральной совокупности. При исследовании следует обеспечить репрезентативность выборочных...
63792. Динамические ряды 22.5 KB
  Анализ динамического временного ряда сводится к вычислению следующих показателей: абсолютного прироста или снижения; темпа роста или снижения; темпа прироста; значения 1 прироста. Темп прироста является отношением абсолютного прироста снижения к предыдущему уровню умноженным на 100.