Google Web after-hours

Contador en flash JSFL Traductor

¿Te gusta el efecto de nieve que ves en la felicitación del blog?

Dibuja una forma semicircular, conviertela en clip de película, y dale un nombre de identificador ‘copo_mc’. Ahora solo tienes que copiar el código que hay abajo.

var cantidad = 250;
var max = 50;
var min = 10;
var ancho = Stage.width;
var altura = Stage.height;
for (var i = 0; i < cantidad; i++) {
	copo_mc = this.attachMovie("copo_mc", "copo_mc" + i, i);
	with (copo_mc) {
		_x = Math.floor(Math.random() * ancho);
		_y = Math.floor(Math.random() * altura);
		_xscale = _yscale = _alpha = Math.floor(Math.random() * (max - min + 1)) + min;
	}
	copo_mc._ypos = Math.floor(Math.random() * 2 + .5);
	copo_mc.incremento = -0.025 + Math.random() * 0.05;
	copo_mc.radianes = 0;
	copo_mc.onEnterFrame = function() {
		this.radianes += this.incremento;
		//trace(this.radianes)
		this._x += Math.sin(this.radianes);
		this._y += this._ypos;
		if (this._y >= altura || this._x >= ancho || this._x <= 0) {
			this._y = -10;
			this._x = -10 + Math.floor(Math.random() * ancho + 10);
		}
	};
}

Descargar ejemplo (4089 hits)

The URI to TrackBack this entry is: http://www.after-hours.org/blog/archives/2005/12/16/efecto-nieve/trackback/

22 Responses to 'Efecto nieve'

  1. byGui Says:

    Para redondear el tema añadiría esta linea en la creación de los copos

    copo_mc.cacheAsBitmap=true;

    Se nota el cambio en ordenadores lentos o si ponemos más cantidad de copos.

  2. Eliseo Says:

    y para redondear el post, hagamos una única “línea de tiempo” para todos los copos :wink:

  3. tonilopez Says:

    cacheAsBitmap estaría bien, pero se tendría que modificar algo más ya que el códgio está escrito para AS1.

    Eliseo:

    Lo de una sola línea de tiempo ¿A que te refieres?

    Saludos

  4. Eliseo Says:

    un sólo onEnterFrame (por ejemplo sobre copo_mc0) y dentro el bucle, en lugar de un bucle y dentro el onEnterFrame.

  5. byGui Says:

    No hay que tocar nada para AS1, lo publicas para AS1 y sigue funcionando y si lo haces para Flash 7 simplemente no funciona el cacheAsBitmap, pero no da error, ya que solo pones una variable de un movieClip a true.

  6. tonilopez Says:

    Eliseo, ¿no sería lo mismo? creo que de las dos formas cada instancia de clip de película tiene su propia línea de tiempo.

    byGui, si te fijas, hay una diferencia en el efecto de caida de la nieve si lo exportas como AS1 o AS2. Fijate.

    Saludos

  7. Eliseo Says:

    [code]
    var cantidad = 250;
    var max = 50;
    var min = 10;
    var ancho = Stage.width;
    var altura = Stage.height;
    //creamos los copos
    for (var i = 0; i = altura || copo._x >= ancho || copo._x

  8. byGui Says:

    Me he fijado y lo que veo en Flash MX 2004, Flash 8 tanto en AS1 como en AS2 es que radianes es NaN y solo veo que los copos se muevan en _y. Pero en ningún momento lo veo como en el banner.

  9. Eliseo Says:

    http://www.after-hours.org/foro/viewtopic.php?p=29714
    (he pasado la discusión sobre la línea de tiempo,porque se me cortaba el comentario
    respecto a tu comentario, btGui, declara antes radianes, vamos añade una línea como
    [code]
    radianes=0
    [/code]
    dentro del with(copo_mc)
    (es que AS2 y Flash 8 se lleva muy mal con las variables no declaradas y el operador de incremento)

  10. byGui Says:

    Si, si lo se, yo habia declarado:

    copo_mc.radianes = copo_mc.incremento=-0.025+Math.random()*0.05;

    para que tuviera un valor de princicpio pero lo que no veo es la diferencia entre AS1 y AS2 en el código. Y en flash MX 2004 y AS1 también me da NaN en los radianes.

    Lo comentaba para saber cual era la diferencia que tenía que ver

  11. tonilopez Says:

    bGuy: Si escribes trace(this.radianes) te devolverá el valor calculado. La diferencia, es que en AS2, el efecto de caida no es correcto (los copos caen directamente hacia abajo, en AS1 se nta un efecto como si el viento mueve los copos aleatoriamente en su eje _x), a ver si entre los tres lo arreglamos :mrgreen:

    Eliseo, hago la modificación que comentas (declarar la variable radianes).

    Saludos!

  12. Eliseo Says:

    Toni, me refería, con lo del radianes=0 que
    se tiene que escribir -o dentro del with o inmediatamente antes del copo_mc.onEnterFrame
    [code]
    copo_mc.radianes=0
    //luego viene lo de
    copo_mc.onEnterFrame=function(){…bla-bla-bla…}
    [/code]
    En MX 2004 Publicar para AS.2 funciona
    NOTA:Podemos escribir, dentro del onEnterFrame
    [code]
    if (this._name=="mc_copo0″){
    trace (this.radianes)
    //luego el resto del código
    }
    [/code]
    Para ver, que si no le ponemos lo del copo_mc.radianes=0 nos saldrá NaN (No es un número)
    El problema de AS.2 es muy sencillo.Si nosotros escribimos en una película nueva
    [code]
    this.onEnterFrame=function(){
    variable+=2
    trace(variable)
    }
    [/code]
    nos va a salir NaN porque no le hemos dado un valor inicial de número, tendríamos que escribir
    [code]
    variable=0
    this.onEnterFrame=function(){
    variable+=2
    trace(variable)
    }
    [/code]

  13. tonilopez Says:

    Bueno, así es como queda la cosa (como al principio pero declarando la variable):

    La variable radianes, se declara para cada instancia de copo_mc.

    Si escribimos trace(this.radianes) el trace es correcto.

    Pero … el resultado sigue siendo diferente para as1 - as2.

    saludos

  14. byGui Says:

    Yo lo sigo viendo igual en AS1 que en AS2. No lo pillo.

    Eso si en el código que has puesto ahora pone:
    if (this._y || this._x >= ancho || this._x this._y >= altura

  15. tonilopez Says:

    Si, error de transcripción, arreglado. Gracias.

  16. Jorge Says:

    Hola!:

    Gracias por el script, y por el resto de la web. Te sigo en la sombr hace un tiempo ;).

    Una duda… Flash no es muy fuerte, jeje, y me gustaría añadir movimiento al script. Es decir, en vez de que aparezca solo Feliz Navidad, poder hacer una animacion en la que aparezca mi nombre, feliz año, etc, y vaya pasando poco a poco.

    He realizado la animacion pero se queda estática en el primer frame, y no avanza hacia el resto.

    Simplemente he descaragado el ejemplo, he borrado la capa donde aparece “Feliz Navidad” y lo he cambiado por una capa con la animación, pero he probado y no hay forma.

    Una ayudita??

    Gracias!!

  17. tonilopez Says:

    Hola Jorge, gracias por seguirnos. Lo que tienes que hacer con la animaciòn, es meterla dentro de un clip de película.

    Saludos

  18. Jorge Says:

    ¡Muchas gracias Toni!

    A pasar buenos días ;).

  19. Drus Says:

    Hola Toni, gracias por el ejercicio.

    He modificado un poco tu código para que los copos se posen sobre un objeto (sujeto_mc) y rule bien en AS2 ;)

    [code]
    var cantidad = 400;
    var max = 50;
    var min = 20;
    var ancho = Stage.width;
    var altura = Stage.height;
    for (var i = 0; i=altura || this._x>=ancho || this._xhttp://drusunlimited.com/2006

    Un saludo. Javi

  20. tonilopez Says:

    Buena idea Drus, tambien puedes hacerlo con la clase de AS8 ConvolutionFilter.

    Saludos!

  21. Drus Says:

    Vaya, se ha cortado el post. Hago como Eliseo y me lo llevo al foro
    http://www.after-hours.org/foro/viewtopic.php?p=29714

  22. Acid Reflux Says:

    Acid Reflux
    Acid Reflux