E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale Adobe Flash

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

GRAFICA 2D  /  Adobe Flash  /  ActionScript (14)

Miscari "elastice" ale MovieClip-urilor

26.09.2008
Miscari

Cel mai des intalnite tipuri de miscari ale MovieClipurilor, miscari realizate prin intermediul ActionScriptului, sunt cele de miscare incetinita si cele de miscare elastica.

Total vizualizari: 6145 6145 afisari   |   Comentarii  3   |   Rating   |   (7 voturi)   |   Timp necesar: 15 min 15 min   |   Nivel de cunostiinte necesar: Incepator  Incepator

Sursa:  Thor.info.uaic.ro  
Autor:  Cosmin Varlan
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1
comenteaza printeaza

Cel mai des intalnite tipuri de miscari ale MovieClipurilor, miscari realizate prin intermediul ActionScriptului, sunt cele de miscare incetinita si cele de miscare elastica.

Principiul de functionare a miscarii incetinite este unul destul de simplu: de fiecare data obiectul este mutat la o distanta mai mica fata de punctul final. De exemplu daca obiectul se afla la 100 de puncte fata de punctul final, in primul pas va fi mutat la 50 de puncte, apoi la 25 de puncte, 12 puncte etc. Cu alte cuvinte obiectul este mereu mutat la o distanta egala cu jumatatea distantei ramase pana la punctul final. Teoretic obiectul nu va ajunge niciodata in punctul final dar practic (din cauza ca la un moment dat zecimalele sunt ignorate), Flash-ul nu va mai putea distinge intre punctul final si cel actual. Atunci putem considera ca obiectul a ajuns la destinatie.

Functia de deplasare incetinita o vom numi "smoothMove" pentru a fi in concordanta cu celelalte functii asociate MovieClip-urilor si vom adauga aceasta functie clasei MovieClip asa cum am facut si in cazul curbei bezier. De mentionat este totusi ca aceasta functie va distruge orice functie asociata evenimentului onEnterFrame asociata in prealabil obiectului.

Asadar functia de miscare incetinita este urmatoarea:

MovieClip.prototype.smoothMove = function (x, y, factor){
    this.onEnterFrame = function(){
        difx = (x-this._x)/factor;
        dify = (y-this._y)/factor;
        this._x += difx;
        this._y += dify;
        if (difx+dify == 0){
            this.onEnterFrame = null;
        }
    };
};

Se creeaza o functie care va trata evenimentul intrarii intr-un cadru care are rolul de a calcula distanta la care trebuie repozitionat obiectul - difx, dify (in exemplul dat factorul era 2 deoarece distanta se injumatatea; este preferabil sa utilizati un factor mai mare). In continuare este adaugata pozitiei actuale diferenta calculata si functia este eliminata (this.onEnterFrame = null;) atunci cand diferentele devin ambele nule (deci si suma lor este 0).

Miscarea elastica difera cu putin fata de cea incetinita, principiul de baza fiind acelasi. In miscarea incetinita pozitionam obiectul la o pozitie intermediara intre pozitia anterioara si cea finala. De aceasta data pozitia la care vom pozitiona obiectul este pe linia formata de pozitia curenta si cea finala dar de fiecare data obiectul va fi situat dupa punctul final - evident de fiecare data la o distanta din ce in ce mai mica. Aceasta logica este aplicata atat pe axa oX cat si pe oY.

MovieClip.prototype.elasticMove = function(pozx,pozy,accx,accy,frecare){
    vitezax = 0;
    vitezay = 0;
    this.onEnterFrame = function(){
    vitezax += (pozx - this._x)*accx;
    vitezax *= frecare;
    this._x += vitezax;
        vitezay += (pozy - this._y)*accy;
        vitezay *= frecare;
        this._y += vitezay;
        if((Math.abs(vitezax) < 0.3) && (Math.abs(vitezay) < 0.3)){
            this.onEnterFrame = null;
        }
    
    };
};

Functia de miscare elastica are ca parametri de intrare coordonatele x si y ale pozitiei finale, acceleratia pe cele doua axe si un factor de frecare. Pentru ca miscarea sa aiba o finalitate (obiectul sa ajunga in pozitia x,y si sa se opreasca acolo) trebuie ca macar unu dintre parametri acceleratie sau frecare sa fie subunitar - altfel distanta dintre pozitia obiectului si cea finala nu se va micsora niciodata ci dimpotriva se va mari.

In mod asemanator putem defini o miscare de scalare elastica:

MovieClip.prototype.elasticScale = function (procent_marire, acc, frecare){
    Viteza = 0;
     this.onEnterFrame = function(){
        viteza += (procent_marire - this._xscale)*acc;
        viteza *= frecare;
        this._xscale = this._yscale += viteza;
        if(Math.abs(viteza) < 0.3){
            this.onEnterFrame = null;
        }
    };
};

Si de aceasta data trebuie sa aveti grija ca valorile acceleratiei si a frecarii sa fie subunitare.

Pagina:
1
comenteaza printeaza
Alte tutoriale Adobe Flash:
Noteaza acest tutorial
Rating tutorial
 
(7 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (3) spune-ti parerea
misterio misterio , Duminica, 14 Februarie 2010, ora 22:12
#3

@ raulversace: Personal am testat efectul si a iesit ceva foarte amuzant. have fun!

Raporteaza acest comentariu ca injurios!
raulversace raulversace , Marti, 09 Februarie 2010, ora 18:41
#2

bai da chiar merge treaba asta?

Raporteaza acest comentariu ca injurios!
ionut , Joi, 30 Octombrie 2008
#1

Nu e mai usor cu clasa Tween ?

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4170
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4080
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4055
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
3870
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
CSS Gimp Photoshop Powerpoint Word Outlook XHTML StyleSheet Swift 3D Sony Vegas Excel MySQL JSON Flash PSD Java Fotografie Javascript SEO Verilog RoR Lightroom Ruby on Rails COREL DRAW AJAX Python Vista Action Script Fireworks Dreamweaver PHP SWF XML Bridge Illustrator HTML
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software