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.Анімаційні ефекти


 

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

3354. Определение электроемкости конденсатора и диэлектрической проницаемости диэлектрика 244.5 KB
  Определение электроемкости конденсатора и диэлектрической проницаемости диэлектрика Определение электрической емкости плоского конденсатора с помощью мостовой схемы. Определение относительной диэлектрической проницаемости диэлектрика. Теоретические ...
3355. Определение электродвижущей силы элемента методом компенсации 116.5 KB
  Определение электродвижущей силы элемента методом компенсации Ознакомление с одним из методов измерения электродвижущей силы (ЭДС) источника тока. Теоретические основы работы Компенсационный метод измерения основан на уравнивании измеряемого напряже...
3356. Определение сопротивления, емкости и индуктивности с помощью мостовой схемы 148.5 KB
  Определение сопротивления, емкости и индуктивности с помощью мостовой схемы Знакомство с методами измерения сопротивления резистора, емкости конденсатора и индуктивности катушки, а также приобретение практических навыков обращения с измерительными п...
3357. Изучение процесса заряда и разряда конденсатора 86 KB
  Изучение процесса заряда и разряда конденсатора Изучение процессов заряда и разряда конденсаторов в RC-цепях, ознакомление с работой приборов, используемых в импульсной электронной технике. Теоретические основы работы Рассмотрим схему, представленн...
3358. Изучение электрических процессов в цепи с газоразрядным диодом 102 KB
  Изучение электрических процессов в цепи с газоразрядным диодом Изучение релаксационных процессов в электрических цепях с конденсаторами и газоразрядным диодом. Ознакомление принципа работы релаксационного лампового генератора пилообразных колебаний....
3359. Юридическая практика и направление её совершенствования на примере Ивановской области 100.41 KB
  Быстрота и кардинальность перемен, происходящих в российском обществе, не могут оставаться без внимания юридической науки. Одновременно это налагает особую ответственность и на правоприменителей за выносимые ими управленческие решения, их с...
3360. Учет, отчетность и аудит движения топлива и запасных частей: современное состояние и направления развития на материалах ОАО СУП Агросервис-ССК 181.69 KB
  Объектом исследования – учет, отчетность и аудит движения топлива и запасных частей СУП «Агросервис-ССК». Цель дипломной работы – изучение на основании литературных источников, нормативно-правовых документов и конкретного сельскохозяйственного предприятия методики учета и аудита топлива и запасных частей, оценка его состояния и пути совершенствования.
3361. Анализ межфирменной конкуренции товара на ООО Торговый дом Лазурит 414.91 KB
  Глобализационные процессы, происходящие в современном мире, обуславливают усложнение форм и ужесточение методов конкурентной борьбы. В этих условиях выходят на первый план и требуют всестороннего научного анализа проблемы, связанные с...
3362. Расчет отделений сборки двигателей КамАЗ-740 370.17 KB
  Одним из основных направлений технической политики ГАБТУ МО РФ является развитие, постоянное обновление (воспроизводство) основных производственных фондов, обеспечение производства площадями, зданиями, сооружениями, и источниками энергоснабжения...