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
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Zah el 13 de Enero de 2007
Por XKlibur el 14 de Enero de 2007
Por mario507_1 el 03 de Mayo de 2007
Por FerNiko el 15 de Diciembre de 2007