Fulgi de zapada
Pentru ca ne dorim atat de mult sa ninga..."let it snow". Nu cu animatii, ci din actionscript vom aduce fulgisori de nea peste peisajul de mai jos.
Inceput
Incepeti prin a crea un document nou flash la dimensiunile 550 x 400 si fundal negru. Desenati un cerc. Cam cat de mare? Undeva intre 15 si 20 de pixeli. Folositi ca model de umplere un degradeu radial plecand de la un albastru deschis spre un alb cu alpha 0 ca in imaginea e mai jos.


Transformati ceea ce ati desenat intr-un movieclip (tasta F8) si numiti-l fulg.
Localizati in library movieclip-ul fulg, click dreapta si alegeti optiunea Linkagei, bifati Export for action script si Export in first frame si alegeti numele fulg.
Mutati fulgul in afara scenei sau stergeti-l pur si simplu. Voi face copii ale acestui movieclip folosind attachMovie si le voi pozitiona pe scena folosind actionscript, deci nu vreau ca acest movieclip sa se vada.
Sa desenam fulgii
Creati un nou layer pe care vom pune actiunile.
Iata scriptul care deseneaza fulgii, de marimi diferite, pozitionati aleator pe scena, cu transparenta aleatoare.
init();
function init() {
var latime = Stage.width;
var inaltime = Stage.height;
var nr = 60;
for (var i = 0; i<nr; i++) {
flm = _root.attachMovie("fulg", "fulg"+i, i);
flm._x = Math.random()*latime;
flm._y = Math.random()*inaltime;
flm._alpha = 40+Math.random()*50;
flm._xscale = flm._yscale=20+Math.random()*50;
}
}
Daca salvati si executati veti obtine efectul acesta:
Hai sa descifram ce mare minune ascund randurile acestea de cod de-au aparut atatia fulgi in peisaj.
latime si inaltime reprezinta dimensiunile scenei (550, respectiv 400 in cazul nostru), iar nr reprezinta numarul de fulgi pe care i-am desenat.
Atribuirea flm = _root.attachMovie("fulg", "fulg"+i, i) nu face nimic altceva decat sa creeze un nou movieclip pe nivelul i in stiva, movieclip care apoi urmeaza a fi pozitionat aleator pe scena folosind atribuirile: flm._x = Math.random()*latime si flm._y = Math.random()*inaltime. Nu este nimic misterios in aceste atribuiri, doar trebuie avut in vedere fapul ca functia Math.random() returneaza un numar aleator pozitiv si subunitar, de aceea am inmultit aceasta valoare cu latime si respectiv inaltime.
Urmeaza stabilirea unei valori pentru transparenta iar asa cum este acum atribuirea, va puteti da seama ca flm._alpha va avea o valoare cuprinsa intre 40 si 90. Deoarece nu vreau ca toti fulgii sa fie de aceeasi dimensiune, am setat si proprietatile flm._xscale si flm._yscale astfel incat acestea sa se situeze intre 20 si 70 de pixeli.
Asadar:
- daca vreti sa aveti mai multi fulgi, schimbati variabila nr la o valoare mai mare.
- daca vreti fulgi mai mari sau mai mici, schimbati _xscale si _yscale
- daca vreti fulgi mai transparenti sau mai putin transparenti, schimbati proprietatea _alpha
Let it snow
Miscarea fulgilor va fi realizata de un script ce se va executa sub incidenta evenimentului onEnterFrame pentru fiecare fulg in parte si anume
flm.yy = 1+Math.random()*2;
flm.xx = -2+Math.random()*4;
flm.onEnterFrame = function() {
this._y += this.yy;
this._x += this.xx;
if (this._y>inaltime+10) {
this._y = -20;
}
if (this._x>latime+20 || this._x<-20) {
this._x = Math.random()*latime;
this._y = -20;
}
};
Deloc complicat. Pentru inceput am fixat pentru fiecare film in parte o deplasare aleatoare pe axele Ox si Oy. E vorba de flm.xx si flm.yy. Fulgii vor avea o miscare permanent de sus in jos, de aceea flm.yy are doar valori pozitive, in schimb, pentru ca nu vrem sa ninga doar de la stanga la dreapta, pentru flm.xx am permis si valori negative (flm.xx = -2+Math.random()*4)
La aparitia evenimentului onEnterFrame se schimba pozitia filmului curent (fulgului) si se testeaza daca acesta a iesit cumva in afara scenei, caz in care este readus intr-o pozitie aleatoare pentru abscisa (axa Ox -atribuirea this._x = Math.random()*latime) si cu valoarea -20 pentru ordonata (axa Oy -atribuirea this._y = -20) .
Jucati-va cu aceste valori si veti obtine o ninsoare mai mult sau mai putin personalizata. Si inca un detaliu: daca vreti sa ninga mai repede? Simplu! Schimbati frame rate-ul pentru filmul flash.
Efectul final ar trebui sa semene cu ceea ce vedeti mai jos (eu am trecut la 200 de fulgi, caci imi este dor de zapada).
Sursa finala
Puteti downloada aici fisierul fla in cazul in care v-ati incurcat la vreun pas.
|