¿Quieres registrarte?

Controlar el número de copos en el efecto de nieve en Flash

Por: XKlibur
10 de Enero del 2007
7124 de clabLevel
Otros artículos de XKlibur
8,954 visitas

Una consulta habitual, referente al tutorial del efecto de nieve en flash es cómo controlar el número de copos que se muestran en pantalla. A continuación presento una forma fácil y rápida de lograr esto, haciendo pequeños cambios en el código.

En la función createSnow introducimos al inicio un contador para llevar el control de los copos de nieve creados. Así podemos generar tantos copos como queramos, resolviendo el problema. El código de la función quedaría de la siguiente forma:

Código :

function createSnow() {
   /* El contador permitirá que sólo se muestren 20 copos en el escenario */
   if (snowCount >= 20) {
      return;
   } 

   /* Crea un copo de nieve a partir del patrón SnowFlake que está en la biblioteca */
   i = _root.getNextHighestDepth();
   tmp = _root.attachMovie("SnowFlake", "snowflake_mc"+i, i);
   /* El copo de nieve cae desde una posición horizontal en [1,550] */
   tmp._x = randRange(1, 550);
   /* Inicialmente, se coloca el copo de nieve fuera del escenario */
   tmp._y = -1;
   /* Ahora se particulariza el copo de nieve estableciendo aleatoriamente su transparencia, * velocidad y tamaño */   
   tmp._alpha = randRange(50, 100);
   tmp.speed = randRange(1, 10);
   tmp._xscale = randRange(70, 110);
   tmp._yscale = tmp._xscale;
   /* Todo copo de nieve inicia su descenso inmediatamente después de creado */
   tmp.moving = true;
   /* moveSnow es responsable de la dinámica del copo de nieve */
   tmp.onEnterFrame = moveSnow;

   /* Cada vez que se crea un copo se incrementa en 1 el contador*/
   snowCount++; 


}


Luego, en la función moveSnow, se van restando los copos una vez que éstos salen del escenario o se quedan detenidos en el cartel.

Código :

unction moveSnow() {
   /* Si el copo está en movimiento... */
   if (this.moving) {
      /* El copo desciende según su velocidad prefijada */
      this._y += this.speed;
      /* Para mayor realismo, el copo experimenta un desplazamiento lateral, oscilatorio */
      this._x += Math.cos(this._y/10);
      /* Si el copo colisiona con Ice_mc detenerlo. Como no se desea que el copo
               permanezca detenido indefinidamente, se utilizará un contador (stopCounter)
               para verificar que transcurra un tiempo prudente antes de remover el copo */
      if (this.hitTest(_root.rect_mc.Ice_mc)) {
         this.moving = false;
         this.stopCounter = 0;
      }
      /* Finalmente, los copos que lleguen al suelo serán eliminados de inmediato */
      if (this._y > 327){
         removeMovieClip(this);
         this.onEnterFrame = null;
         if (snowCount > 0) {
            snowCount--; //Cada vez que un copo llega al suelo se resta del contador
         }         
      }
   } 

   } else {
      /* Entrar aquí implica que el copo está detenido por colisionar con Ice_mc. Por ende,
               se incrementa el contador stopCounter, y si éste supera la cota superior
               preestablecida,  se procede a eliminar el copo */
      this.stopCounter++;
      if (this.stopCounter > 500) {
         this.onEnterFrame = null;
         this.removeMovieClip();
         trace(snowCount);
         if (snowCount > 0) {
            snowCount--; // Resta en 1 el contador de copos 
         }
      }
   }
}



Como ven es algo muy sencillo ^^

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript

Comentarios | Enviar un comentario
No había visto ese post. Muy cool Zah ^^
Por: XKlibur
muy buen tutorial, pero hay que ver si puede caer y pasar enfrente de alguna imagen y darle un efecto mas realista al efecto
Por: mario507_1_blog
else se encuentra fuera del if, ya lo corregi pero aun asi no corre el script. Que estara mal?
Por: FerNiko_blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.