3. II. Movimiento avanzado

Esta entrada pertenece a ActionScript 3 - Guía para Principiantes.



Control de velocidad realista

Vamos a realizar un control de velocidad basado en términos de aceleración. Es decir, cada vez que pulsemos una tecla, vamos a propulsar nuestro pong, sumándole una aceleración la velocidad que ya tuviere. Además, para que la cosa no se vaya de madre y el pong se vuelva medio loco, vamos a simular fricción con el aire, que frenará nuestro pong. Nuestras variables para el control de velocidad serán:


  // Control de velocidad
private var vy:Number = 0; // Velocidad actual
private var acc:Number = 1; // Aceleración
private var friccion:Number = 0.95; // Fricción con el aire

Inicializar los atributos en su declaración surge el mismo efecto que si los iniciaramos en el constructor de clase.


Para hacer uso de estas nuevos atributos, modificamos la función mover:


  public function mover(e:Event)
{
if (key.isDown(upKey))
{
vy -= acc;
}
else if (key.isDown(downKey))
{
vy += acc;
}

y += vy;
vy *= friccion;
}

Si probamos la película, veremos que nuestros pongs ahora se desplazan de manera más suave y realista.


Acotando los límites del movimiento

Aún así, seguimos teniendo un problema importante: Cuándo el pong llega a alguno de los límites de película, desaparece. Podemos controlar esto de manera sencilla, añadiendo el siguiente bloque al final de la función mover:


   if (y < 0)
{
y = 0;
vy = -vy;
}
else if (y > stageRef.stageHeight)
{
y = stageRef.stageHeight;
vy = -vy;
}

Con este trozo de código, controlamos que la posición "y" de nuestro pong (su punto central) no salga de los límites de la película (Recuerda que stageRef era una referencia al escenario principal de la película). Si el pong intenta salir de los límites, restablecemos su posición al límite más cercano y revertimos la dirección de su velocidad, consiguiendo un efecto de rebote bastante resultón.








Anterior Índice Siguiente