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 ;)



Comentarios
Joder Marc
Ahora si que te has quedado conmigo
te pediré que me envíes el .fla
:P
está genial!
Feliz resaca!
Que bien que te ha quedado ese efecto!!
A ver si lo puedo usar en mi saludo navideño :)
Tak, el fla lo vendo…. ummm… donación para la wii XDDD
C00l :D
El efecto queda de lo más soft y agradable, muy bueno :)
errr…. gracias por el code xD
*corre a malvender el código por los bajos fondos, a cambio de comida….
Buen intento!!!!
si fuese a obtener beneficio con el, seguro que te lo “compraba”
pero como no es el caso…
si quieres puedo darte ánimos, comprensión y apoyo
:P
bah, a ver si hay suerte y cae por navidad … pero lo veo dificil :P
saludos!
Muy curiosete, me ha molao. Sobre todo se nota que tu eres programeitor senior. Yo que vengo de los lares diseñísticos y estoy ahora haciendo mis primeros pinitos en esto seguro que para conseguir lo de la nieve habría hecho algo bastante mas lioso y sucio…
Marc, entonces la mejor manera de hacer animaciones que quieres que duren infinito es a base de crear y borrar enterFrames, no? como tú has hecho aqui.
Es que yo una vez me comí la cabeza mogollón para hacer una animación constante de 3 diapositivas que iban cambiando todo el tiempo, porque cargaba el procesador un huevo. Quería que cambiasen de foto cada 2 o 3 seg. y para tener al procesador “contando” los segundos le dejaba con la lengua fuera… quizá debería haberme planteado algo más del tipo de lo que has puesto aqui no? Aunque en el fondo siempre habría estado haciendo un cálculo y no se si habria seguido siendo demasiado… O_o
Bueno que yo iba a dejar un comentario corto…. :oP
Felices Fiestis! ^^
Teresa, no se si soy senior, junior, analista o qué, sólo se que no se nada.
La verdad es que esa no es la forma más optima (con enterframes), eso es un apaño rapido que no tiene muy en cuenta la CPU del visitante :P.
Lo que podría haber hecho es tener una pila (array) de clips, los cuales se van actualizando con un for, el cual podría ser llamado con un onEnterFrame o bien con un setInterval. Así sólo habría una iteración y no se sobrecargaría la máquina.
En referencia a lo que comentas del pasafotos, yo habría hecho una función llamada pasaFoto y se llamaría cada X segundos con un setInterval
[as]
segundos = 3;
function pasaFoto(){
// código …
}
setInterval(pasaFoto,segundos);
[as]
algo “asín”.
saludos!!
¡Me ha gustado mucho el efecto de nieve!
No me he podido resistir a aplicarlo a alguna tontería mia:
http://www.estadologico.com/varios/copos.html
Gracias Marc.
genial!! ahora sólo le falta la lengua que recoja copitos y se le fundan en un segundo :P
q mono!! :)
Con este código de la nieve creo que te ganas mi aporte para tu wii! :P
Saludos navideños nevados!!
http://www.crearimagen.com/cosas/saludos-2007
Gracias por la nieve! :)
José, te ha quedado genial :D Felices fiestas a vosotros tambien.
hola alguien sabe como le puedo quirtar ese efecto cunaod cambia de escena por que solo la quiero en una escena
esto es una cagades, yo se mas que ustedes.
necesito el .fla porfas mandame. bye Marc
hola. oye necesito de tu ayuda acabo de entrar a un trabajo y me piden sepa flash estoy en eso, pero necesitan una postal navideña, ayudame pasame el flash, en vdd haras una buena accion gracias
El código para que funcione está ahí, si con eso no tienes suficiente tendrás que dejar ese trabajo y dedicarte a algo que se te de mas bien.
mola! que crak
Deja un comentario