Codul principal
In continuare, trebuie sa incarci bila din librarie pe scena, astfel incat sa ii poti aplica anumite forte. Arunca o privire pe codul de mai jos:
function init() {
leftLimit = 0;
rightLimit = Stage.width;
bottomLimit = Stage.height;
topLimit = 0;
}
function createBall() {
this.attachMovie("circle","myCircle",_root.getNextHighestDepth(),{_x:(rightLimit-leftLimit)/2, _y:(bottomLimit-topLimit)/2});
}
init();
createBall();
this.onEnterFrame = function() {
angle = Math.atan2(_ymouse-myCircle._y, _xmouse-myCircle._x);
distance = Math.sqrt(Math.pow(_xmouse-myCircle._x, 2)+Math.pow(_ymouse-myCircle._y, 2))/10;
myCircle.accelerate(-Math.cos(angle)/distance,-Math.sin(angle)/distance);
if (Key.isDown(Key.RIGHT)) {
myCircle.accelerate(0.4,0);
}
if (Key.isDown(Key.LEFT)) {
myCircle.accelerate(-0.4,0);
}
if (Key.isDown(Key.UP)) {
myCircle.accelerate(0,-0.4);
}
if (Key.isDown(Key.DOWN)) {
myCircle.accelerate(0,0.4);
}
};
In init() au fost definite limitele pentru deplasarea bilei la stanga (leftLimit), dreapta (rightLimit), sus (topLimit) si jos (bottomLimit). Ca valori au fost folosite dimensiunile scenei.
Functia createBall() preia din librarie simbolul ce contine bila si il adauga pe scena, in mijlocul acesteia, cu numele „myCircle”.
Dupa apelul celor doua functii de mai sus, urmeaza definitia unei functii onEnterFrame, ce va controla efectul de „vant” generat de deplasarea mouse-ului.
Pentru aceasta, sunt calculate unghiul fata de orizontala al dreptei definite de pozitia bilei si cursor (angle), si distanta dintre cele doua (distance). Apoi, este apelata functia accelerate(), avand ca parametrii proiectiile vectorului definit de unghi si modul, in coordonate polare. In plus, functia onEnterFrame verifica daca exista input de la tastatura, cu alte cuvinte daca a fost apasata una dintre tastele sageata, si apeleaza accelerate() cu valorile corespunzatoare.
Codul pentru particule
Codul este foarte simplu:
this.onEnterFrame = function() {
distance=Math.sqrt((Math.pow(_alpha-0,2))+(Math.pow(_alpha-0,2)))/5;
_alpha-=distance
_xscale-=distance/4
_yscale-=distance/4
if(_alpha<1){
this.removeMovieClip()
}
}
Pentru fiecare frame este calculata distanta dintre valoarea _alpha a particulei si 0. Folosind proprietatea _alpha ca distanta, poti calcula un factor de scalare si de reducere a opacitatii particulei. Daca valoarea _alpha este apropiata de 0, particula este stearsa. Daca inlocuiesti valorile „5” (/5) si „4” (distance/4) cu alte numere, vei observa ca timpul de viata al particulei se modifica. In plus, poti modifica movie clip-ul cu particula, adauga-i alte efecte.
In final, vei obtine un efect care, desi nu este foarte realist, reprezinta o abordare facila pentru o simulare cu doar cateva linii de cod.
|