Лекція 4 Анімація Програми, які будують, переміщають І змінюють форму зображень на екрані



Скачати 57.79 Kb.
Дата конвертації15.05.2017
Розмір57.79 Kb.



ЛЕКЦІЯ 4
Анімація

Програми, які будують, переміщають і змінюють форму зображень на екрані відповідно до заздалегідь розробленого сценарію, називають анімаційними.

Анімаційні програми вимагають застосування досить складних алгоритмів і використовують великий об'єм даних. Дані, на підставі яких здійснюються рухи фігур або їх фрагментів, отримують трьома способами:

-об'являют в програмі як масиви;

-отримують алгоритмічним шляхом в тілі програми (наприклад, аналізуючи значення, повертані при натисненні клавіші);

-прочитують з диска порціями (зазвичай в область);

Часто, звичайно, бувають програми, які отримують дані з двох або трьох джерел.

Анімаційні програми працюють з двома класами об'єктів: спрайтом і середовищем.

Спрайт - це логічно закінчений рухомий елемент зображення на екрані.

Середовище - це фон, по якому відбувається рух спрайту.

Існують безліч способів змусити спрайт рухатися. Всі вони розділяються на дві групи:

-комбінаційні;

-морфологічні;

Розглянемо комбінаційний метод.

У основі комбінаційних методів лежать різні модифікації алгоритму:

-вивести варіант спрайту на екран;

-стерти спрайт;

-вивести з деяким переміщенням інший варіант спрайту і так далі

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

Анімаційні програми вимагають застосування складних алгоритмів і використовують великий об'єм даних.

Дані для програм можна отримати трьома способами:

- зберігають в програмах в масивах;

- отримують алгоритмічним шляхом в тілі програми;

- прочитують з диска порціями.

Перший спосіб використовується рідко, оскільки необхідні масиви великих розмірів.
Другий спосіб розглянемо при роботі з клавіатурою і з мишкою.
Робота з клавіатурою.

У програмах аналізуються коди натиснутих клавіш і відповідно цьому виконуються ті або інші дії.

Фрагмент програми:

Case c of

‘a’ : x=x+10;

‘b’ : x:= x-10;

‘c’ : y:= y+10;

‘d’ : y:= y-10;

end;
При натисненні на клавішу ‘ a’, координата х збільшується на 10 піксел.

При натисненні на клавішу ‘ b’, координата х зменшується на 10 піксел.

При натисненні на клавішу ‘ с’, координата у збільшується на 10 піксел.

При натисненні на клавішу ‘ d’, координата у зменшується на 10 піксел.


Робота з мишкою.

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

Робота реалізується через механізм переривань. Переривання - це подія, яка вимагає припинення виконання програми.

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

Для використання механізму переривань в Pascal в модулі DOS існує процедура INTR.
procedure Init_m;

var r:registers;

Begin

r.ax:=0;


Intr($33,r)

End;


procedure Hide_m;

var r:registers;

Begin

r.ax:=2;


Intr($33,r)

End;


procedure Show_m;

var r:registers;

Begin

r.ax:=1;


Intr($33,r)

End;


procedure GetMouseXY(var x,y:integer;var lb,rb,tb:boolean);

var r:registers;

bcode:byte;

Begin


with r do

begin


ax:=3;

Intr($33,r);

x:=cx;

y:=dx;


BCode:=bx;

end;


lb:=(Bcode and 1)=1;

rb:=(Bcode and 2)=2;

tb:=(Bcode and 4)=4;

End;


Відеосторінки.

Рух спрайту викликає мигтіння екрану і носить декілька переривистий характер.

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

Якщо ж дати команду вважати видимою «приховану» сторінку, то вона миттєво з'явиться на екрані.

Кількість сторінок залежить від поточного режиму і типу адаптера.

Нумерація починається з 0.







Режим

Номер




Сторінка

EGA

EGALO

0

640*200

4




EGAHI

1

640*350

2

VGA

VGELO

0

640*200

4




VGAMED

1

640*350

2




VGAH`

2

640*480

1

У кожен окремий момент на екрані може відобразиться тільки одна сторінка, вона називається видимою. За умовчанням видима сторінка 0.

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

Сторінка, на якій в даний момент формується зображення, називається активною. Для роботи з відеосторінкою передбачено дві процедури:



Setactivepage і Setvisualpage(Page:word);

Процедура Setactivepage(Page:word) встановлює активну сторінку для побудови зображення: Setactivepage(1);

Побудова зображення може здійснюватися непомітно для того, що дивиться на екран (в цьому випадку активна сторінка не співпадає з видимою). Сформувавши сторінку, її можна показати на екрані за допомогою процедури: Setvisualpage(Page:word);

де Page - номер видимої сторінки.

Наприклад:

OutTextXY(100,100,` сторінка 0`);

SetActivePage(1);

OutTextXY(200,100,` сторінка 1`);

Delay(200);

SetVisualPage(1);
У програмах застосовують наступний алгоритм:

-вивести зображення на нульову сторінку (вона видима);

-сформувати зображення на невидимій сторінці 1;

-зробити видимою сторінку 1;

-сформувати нове зображення на невидимій нульовій сторінці і так далі
Графічні вікна

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

Якщо потрібно створити вікно, необхідно використовувати процедуру:

Setviewport(x1,y1,x2,y2:integer; clip:boolean);

x1,y1,x2,y2-координати вікна;

clip-визначає: чи відсікатиметься малюнок при виводі за межі екрану Clipon=true чи ні Clipoff=false.

Після установки вікна, за точку відліку береться верхній лівий кут вікна, що має координати (0,0).



Для очищення вікна використовується процедура Clearviewport.


База даних захищена авторським правом ©lecture.in.ua 2016
звернутися до адміністрації

    Головна сторінка