Tutorial 6 - Animación con ActionScript 3.0

Paso 11 de 19

De momento tendremos la función wind como sigue:

function wind(e:Event):void
{
    cloud1_mc.x += 1;
}

Probamos la película para comprobar cómo se desplaza la nube hacia la derecha, mientras que sigue siendo arrastrable. Podemos probar con distintos valores hasta encontrar una velocidad que nos parezca adecuada (por ejemplo 0.4).

Si mantenemos pulsada la nube para arrastrarla pero no soltamos el ratón, la nube continuará avanzando hacia la derecha fuera del ratón. Aunque después soltemos el ratón, el evento MOUSE_UP ya no se producirá, ya que significa levantar el botón del ratón encima de la nube (no fuera de ella). De esta forma ya no podremos soltar el arrastre de la nube.

Para solucionarlo podemos asociar a la función drop otro evento de ratón llamado ROLL_OUT, que significa estar pulsando sobre la nube pero que el ratón se arrastre fuera de ella. Podemos crear el nuevo evento bajo el evento MOUSE_UP.

Por ahora los listeners que hemos creado serán los siguientes:

cloud1_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
cloud1_mc.addEventListener(MouseEvent.MOUSE_UP, drop);
cloud1_mc.addEventListener(MouseEvent.ROLL_OUT, drop);
cloud1_mc.addEventListener(Event.ENTER_FRAME, wind);

En este caso no necesitaremos crear una nueva función, ya que este listener llamará a la misma función drop que habíamos creado previamente.

Si probamos la película veremos que si en algún momento dejamos de arrastrar la nube, ésta terminará desapareciendo por la parte derecha del escenario. Aunque deje de visualizarse, la instancia seguirá ejecutando el código.

Lo siguiente que vamos a programar va a ser que cuando haya desaparecido por la parte derecha, vuelva a aparecer por la parte izquierda del escenario.

Para ello vamos a introducir una sentencia condicional dentro de la función wind, de tal forma que si se cumplen unos determinados requisitos, la nube se posicione en la parte izquierda del escenario.