Sunteți pe pagina 1din 3

Tehnici de animaie Ne propunem s rspundem la urmtoarea ntrebare: cum facem o figur s se mite pe ecran?

Pentru rezolvarea acestei probleme exist mai multe tehnici care vor fi prezentate n continuare, dar toate au acelai principiu de funcionare i anume: - se deseneaz figura: - se ateapt o perioad de timp; - se terge figura i se deplaseaz ntr-o alt poziie. Pentru ca figura s par c se mic n mod real, un rol important l are timpul de ateptare (timpul n care figura rmne pe ecran pn a se terge). Acesta se regleaz de la caz la caz cu ajutorul procedurii Delay. n principal, exist trei tehnici de realizare a animaiei. Ele difer prin procedurile pe care le utilizeaz i prin viteza de execuie. Pentru exemplificarea lor vom folosi o singur problem i anume de a mica un ptrat pe orizontal. Tehnica 1 Operaiile de desenare i tergere a figurii se fac cu ajutorul procedurii SetWriteMode, pe care o vom prezenta n continuare. Forma general a acestei proceduri este SetWriteMode(valoare ntreag). Vom folosi aceast procedur cu un singur parametru i anume XorPut (valoarea 1 predefinit n Unit-ul Graph). n concluzie, vom pune SetWriteMode(XorPut). Dup apelul acestei proceduri procedm astfel: apelm o procedur care deseneaz o figur (aceasta va fi vizibil pe ecran); ateptm o perioad de timp; apelm din nou procedura care realizeaz desenul, exact in aceeai poziie (la acest apel desenul va disprea, pentru c, de fapt, desenul se realizeaz acum utiliznd culoarea fondului); apelm procedura care realizeaz desenul ntr-o alt poziie (acesta va deveni vizibil, pentru c se realizeaz utiliznd culoarea curent); ateptm o perioad de timp; procedeul se repet pn cnd figura a ajuns n poziia dorit.

Tehnica 2 Aceast tehnic de animaie este superioar primei tehnici, datorit faptului c este mai rapid operaia de aducere din memorie pe ecran a unei imagini, dect desenarea ei. Acest fapt constituie un mare avantaj n cazul imaginilor complexe. Pentru a nelege aceast tehnic, trebuie s prezentm n prealabil cteva proceduri. Orice imagine care se afl pe ecran poate fi salvat n memoria intern. Exist posibilitatea ca anumite informaii (cum ar fi cele care permit vizualizarea unei imagini) s fie salvate n memoria intern, alocnd spaiul necesar pentru aceasta n timpul execuiei programului. O astfel de alocare a memoriei poart numele de alocare dinamic i se va studia n detaliu n clasa a zecea, dar pentru aceast tehnic de animaie ne sunt necesare cteva cunotine minimale. Variabila de tip Pointer are posibilitatea de a reine o adres n memorie (a nu se face confuzie ntre adresa unei zone de memorie i coninutul ei). Alocarea spaiului n memorie (un

numr de octei consecutivi la o anumit adres) se face cu ajutorul procedurii GetMem care creeaz n heap o variabil dinamic de dimensiune specificat. Sintax: Procedure GetMem (Var p : Pointer, dim : Word); P variabil de tip pointer care va conine adresa de nceput a zonei alocate variabilei dinamice Dim este o expresie care stabilete lungimea n octei a zonei care va fi ocupat n heap. Valorea sa maxim este 65521. Cum salvm imaginea? De fapt, se salveaz imaginea coninut ntr-un dreptunghi pentru care se cunosc coordonatele colurilor din stnga sus i dreapta jos: De unde tim ci octei sunt necesari pentru a salva o imagine? Aici, ne este de mare folos funcia ImageSize. Aceast funcie este de tip Word i returneaz numrul de octei necesari pentru salvarea unei imagini n cazul cnd dispunem de acest spaiu, n caz contrar se returneaz valoarea 0. Pn acum tim cum putem afla numrul de octei necesari memorrii imaginii, cum s rezervm spaiul necesar memorrii imaginii, dar nu tim cum salvm efectiv imaginea (octeii corespunztori ei aflai n memoria video). Pentru a putea realiza aceasta, folosim procedura GetImage are forma urmtoare: GetImage (x1,y1,x2,y2,a^). Parametrii au urmtoarea semnificaie: - x1,y1,x2,y2 - coordonatele colului din stnga sus i dreapta jos ale dreptunghiului care conine imaginea; - a^ - spaiul n care se face salvarea. Referitor la ultimul parametru, facem urmtoarele precizri: - a este variabil de tip Pointer - cnd scriem a, ne referim la adresa unde s-a fcut rezervarea); - cnd scriem a^ ne referim la coninutul de la adresa care se gsete n variabila a. n concluzie, procedura GetImage are rolul de a salva o imagine n memorie. Operaia invers, da a reface imaginea prin aducerea octeilor de informaie n memoria video, se face prin utilizarea procedurii PutImage. Aceasta are forma general: PutImage(x1,y1,a^,XorPut). Parametrii au urmtoarea semnificaie: - x1,y1 - coordonatele colului din stnga sus al dreptunghiului care conine imaginea (nu este obligatoriu s refacem imaginea n poziia pe care a avut-o nainte de salvare, acest fapt permite i animaia); - a^ - coninutul zonei de memorie a crei adres se gsete n a; - parametrul XorPut, prezentat i la SetWriteMode i care are rolul ca odat figura s fie vizibil, odat nu (se deseneaz utiliznd culoarea de fond). Utiliznd tehnica salvrii i refacerii imaginii, pentru a realiza animaia se procedeaz astfel: se deseneaz figura ntr-o prim poziie; se calculeaz numrul de octei necesari salvrii ei n memoria intern; se salveaz imaginea; se ateapt un interval de timp; se reface imaginea dar cu culoarea fondului, ceea ce duce de fapt la tergerea ei; repetitiv se procedeaz astfel: - se reface imaginea ntr-o poziie nou; - se ateapt un interval de timp; - se reface imaginea n aceeai poziie dar, datorit parametrului XorPut, de fapt se terge;

procedeul continu pn cnd s-a ajuns n poziia final.

Tehnica 3 Aceast tehnic nu este aplicabil n general, ci numai n cazul n care se lucreaz ntr-un mod grafic, cu un driver grafic ce permite utilizarea mai multor pagini video. O pagin video este memoria necesar (existent fizic pe placa grafic) ce permite reinerea unei imagini. Ideea de baz este urmtoarea: att timp ct este vizualizat o pagin, ntr-o alta se realizeaz desenul n noua poziie. Prin aceasta se ctig timp. Un exemplu n care putem folosi aceast tehnic este atunci cnd folosim driverul VGA si lucrm n modul VGALo, caz in care dispunem de 4 pagini video. Apar dou noiuni noi i anume pagina vizualizat i pagina activ.