« # »

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

Actionscript:
  1. maxenganxats = 100;
  2. p=0;
  3. ample = Stage.width;
  4. enganxats = new Array();
  5. creaFloc = function(){
  6.     p++;   
  7.     floket = "snow" + (Math.round(Math.random()*3)+1)
  8.     var ix = Math.random()*ample;
  9.     var iy = -15;
  10.    
  11.     _root.createEmptyMovieClip("floc"+p,p);
  12.     var clip = _root["floc"+p];
  13.     clip.attachMovie(floket,"floc",1);
  14.    
  15.     clip.$x = ix;
  16.     clip._y = iy;
  17.     clip.v = 0.5+Math.random();
  18.     clip.r = Math.random()*10;
  19.     clip.angle = (Math.random()*360)*Math.PI/180;
  20.    
  21.     clip.onEnterFrame=function(){
  22.         this._y += this.v;
  23.         this._x = this.$x + (Math.sin(this.angle+=(this.v/5)) * (this.r));
  24.         this._yscale = 50+(Math.cos(this.angle/2)*50);
  25.         this._xscale = 50+(Math.cos(this.angle/2)*50);
  26.         this._rotation += this.v;
  27.         if(_root.pegamento.hitTest(this._x,this._y,true)){
  28.             enganxats[enganxats.length] = this;
  29.             delete this.onEnterFrame;
  30.         }
  31.        
  32.         if(this._y> 60){
  33.             this._alpha-=20;
  34.             if(this._alpha<=0){
  35.                 this.removeMovieClip();
  36.                 delete this.onEnterFrame;
  37.             }
  38.         }
  39.     }
  40. }
  41. elimina=function(e){
  42.     e.onEnterFrame=function(){
  43.         this._alpha-=10;
  44.         if(this._alpha<=0){
  45.             this.removeMovieClip();
  46.             delete this.onEnterFrame;
  47.         }
  48.     }
  49. }
  50. onEnterFrame=function(){
  51.     creaFloc();
  52.     if(enganxats.length>=maxenganxats){
  53.         e = enganxats.shift();
  54.         elimina(e);
  55.     }
  56. }

Ala, felices fiestas ;)

Comentarios

  1. tak | diciembre 20th, 2006 | 4:02 pm

    Joder Marc

    Ahora si que te has quedado conmigo
    te pediré que me envíes el .fla
    :P

    está genial!

    Feliz resaca!

  2. Josepzin | diciembre 20th, 2006 | 4:03 pm

    Que bien que te ha quedado ese efecto!!
    A ver si lo puedo usar en mi saludo navideño :)

  3. marc | diciembre 20th, 2006 | 6:36 pm

    Tak, el fla lo vendo…. ummm… donación para la wii XDDD

  4. MORPHX | diciembre 20th, 2006 | 7:46 pm

    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….

  5. tak | diciembre 20th, 2006 | 10:49 pm

    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

  6. marc | diciembre 20th, 2006 | 11:30 pm

    bah, a ver si hay suerte y cae por navidad … pero lo veo dificil :P

    saludos!

  7. teresa | diciembre 21st, 2006 | 11:10 am

    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! ^^

  8. marc | diciembre 21st, 2006 | 11:30 am

    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!!

  9. manolo | diciembre 21st, 2006 | 11:42 am

    ¡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.

  10. marc | diciembre 21st, 2006 | 12:17 pm

    genial!! ahora sólo le falta la lengua que recoja copitos y se le fundan en un segundo :P

    q mono!! :)

  11. Josepzin | diciembre 22nd, 2006 | 9:56 pm

    Con este código de la nieve creo que te ganas mi aporte para tu wii! :P

  12. Josepzin | diciembre 23rd, 2006 | 12:03 pm

    Saludos navideños nevados!!

    http://www.crearimagen.com/cosas/saludos-2007

    Gracias por la nieve! :)

  13. marc | diciembre 23rd, 2006 | 5:33 pm

    José, te ha quedado genial :D Felices fiestas a vosotros tambien.

  14. darinka | abril 20th, 2007 | 6:00 pm

    hola alguien sabe como le puedo quirtar ese efecto cunaod cambia de escena por que solo la quiero en una escena

  15. Ga | julio 7th, 2007 | 6:13 am

    esto es una cagades, yo se mas que ustedes.

  16. Amgel Hurtado Ruiz | octubre 31st, 2007 | 12:38 am

    necesito el .fla porfas mandame. bye Marc

  17. nuevo_EN_flash | noviembre 8th, 2007 | 2:48 am

    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

  18. marc | noviembre 8th, 2007 | 11:35 am

    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.

  19. Pupeluí | diciembre 4th, 2007 | 9:23 pm

    mola! que crak

Deja un comentario

(*: Datos necesarios para dejar un comentario)

Get Adobe Flash playerPlugin by wpburn.com wordpress themes