Creare un fiocco di neve in Flash
Giovedì 6 Dicembre, 2007Alcuni lettori mi hanno chiesto come è stato creato il fiocco di neve, così realistico, del Widget natalizio. Chi ha scaricato il sorgente probabilmente già lo sa... comunque è stato davvero semplice. Prima di tutto ho selezionato lo Strumento Pennello in Flash ed ho disegnato un punto.
![]() |
![]() |
Ho trasformato questo in un simbolo ed ho applicato due effetti nella giusta sequenza: smussatura e sfocatura:
![]() |
![]() |
Il risultato è stato:
A questo MovieClip (simbolo) ho associato una semplice classe CNeve, che crea di fatto l'intelligenza del fiocco stesso:
-
class CNeve extends MovieClip {
-
private var _interval;
-
private var _maxy:Number;
-
//
-
function CNeve() {
-
_interval = setInterval(this, "_move", 25);
-
_maxy = Math.round((Stage.height+256)/2)+_getRndRange(-20, -7);
-
}
-
//
-
private function _getRndRange(min:Number, max:Number):Number {
-
var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
-
return randomNum;
-
}
-
//
-
private function _move() {
-
_y += _getRndRange(1, 5);
-
_x += ((_getRndRange(-50, 50))>0) ? 1 : -1;
-
_rotation += _getRndRange(1, 5);
-
if (_y>_maxy) {
-
clearInterval(_interval);
-
}
-
updateAfterEvent();
-
-
}
-
}
Il metodo _move() contiene l'intelligenza del fiocco, ovvero la funzione di caduta, estremamente semplice. Variando la funzione randomica _x += ((_getRndRange(-50, 50))>0) ? 1 : -1;, ad esempio inserendo un _getRndRange(-550, 50), si può aggiungere un effetto effetto vento, cioè i fiocchi cadono con una pendenza particolare. In particolare si possono mandare i fiocchi a destra e a sinistra usando un codice di questo tipo:
-
_x += ((_getRndRange( _getRndRange(-350, -50), _getRndRange(50, 350) ))>0) ? 1 : -1;
La rotazione (_rotation += _getRndRange(1, 5);), poi, conferisce un ulteriore dettaglio al fiocco stesso.
Quando creo un fiocco (vedi funzione creaFiocco() più sotto) ho aggiunto anche un alpha=90 e uno scale randomico, per avere fiocchi di neve di diverse dimensioni.
-
// crea fiocco
-
function creaFiocco() {
-
var s = randRange(20, 100);
-
var x = randRange(-Math.floor((Stage.width - 320) / 2), Math.round((Stage.width + 320) / 2));
-
var y = -Math.floor(((Stage.height - 256) / 2)) - 10;
-
c_mc.attachMovie("neve","neve_" + index,index,{_x:x, _y:y, _xscale:s, _yscale:s, _alpha:90});
-
index++;
-
if (index> 1000) {
-
index = 1;
-
c_mc = createEmptyMovieClip("c_mc", 2);
-
}
-
}
E questo è tutto...
Dimenticavo... Auguri a tutti e Buone feste...





















