diciembre 20th, 2006
Efecto de nieve en flash
Ya es típico de navidad el hecho de ver páginas que modifican el logo, la cabecera o la página en si para añadir un adorno navideño. En CDmon este año hemos decidido hacer algo más bien minimalista, que no moleste pero que esté ahí, en concreto hemos modificado la cabecera donde hay el logo para que las borlitas de nieve se queden enganchadas al logo de CDmon para simbolizar la llegada del invierno a nuestras casas.
La forma que he seguido para hacerlo es muy sencilla y no hace uso de ningún super truco de optimización, por lo que nos podemos encontrar que ralentice algún ordenador más bien lento.
En la biblioteca tendremos 4 simbolos con formas de borlita de navidad, las cuales usaremos con un attachMovie.
Para enganchar las borlitas al logo cuando pasan cerca de él, lo que hacemos es dibujar la zona donde se engancharán y convertimos la "mascara" en un clip de pelicula), marcamos un tope de borlitas enganchadas (50) con lo que cada vez que se enganche una borlita de más, se eliminará la primera que había mediante un alpha.
A continuación el código que he usado (mi regalo de navidad para vosotros ;)):
-
maxenganxats = 100;
-
p=0;
-
ample = Stage.width;
-
enganxats = new Array();
-
creaFloc = function(){
-
p++;
-
floket = "snow" + (Math.round(Math.random()*3)+1);
-
var ix = Math.random()*ample;
-
var iy = -15;
-
-
_root.createEmptyMovieClip("floc"+p,p);
-
var clip = _root["floc"+p];
-
clip.attachMovie(floket,"floc",1);
-
-
clip.$x = ix;
-
clip._y = iy;
-
clip.v = 0.5+Math.random();
-
clip.r = Math.random()*10;
-
clip.angle = (Math.random()*360)*Math.PI/180;
-
-
clip.onEnterFrame=function(){
-
this._y += this.v;
-
this._x = this.$x + (Math.sin(this.angle+=(this.v/5)) * (this.r));
-
this._yscale = 50+(Math.cos(this.angle/2)*50);
-
this._xscale = 50+(Math.cos(this.angle/2)*50);
-
this._rotation += this.v;
-
if(_root.pegamento.hitTest(this._x,this._y,true)){
-
enganxats[enganxats.length] = this;
-
delete this.onEnterFrame;
-
}
-
-
if(this._y> 60){
-
this._alpha-=20;
-
if(this._alpha<=0){
-
this.removeMovieClip();
-
delete this.onEnterFrame;
-
}
-
}
-
}
-
}
-
elimina=function(e){
-
e.onEnterFrame=function(){
-
this._alpha-=10;
-
if(this._alpha<=0){
-
this.removeMovieClip();
-
delete this.onEnterFrame;
-
}
-
}
-
}
-
onEnterFrame=function(){
-
creaFloc();
-
if(enganxats.length>=maxenganxats){
-
e = enganxats.shift();
-
elimina(e);
-
}
-
}
Ala, felices fiestas ;)






