Hola a todos. Soy nuevo en este gran foro.
Resulta que estoy en mis inicios con Flash CS6 Y ActionScript 3.0. Estoy haciendo un sencillito juego al estilo Breakout (El que con una pelotita hay que destruir los bloques en pantalla, para éllo hay que evitar que la pelota se caiga haciéndola rebotar contra la barra que manejamos con las flechas de los cursores o con el mouse). Me aprendí de memoria una formulita para hacer rebotar la pelota contra la barra (Creando el efecto que dependiendo en qué parte de la barra colisione la pelota el ángulo de rebote varía). Funciona todo ok, pero me gustaría que me expliquen esa fórmula, es decir por qué produce ese efecto.
Supongamos que a la barra la llamé barra, a la pelota, pelota. Al convertir los gráficos en símbolos el punto de origen lo marqué en la esquina superior izquierda de los gráficos y después obviamente les dí nombres de instancia. Creé 2 variables para la velocidad horizontal y velocidad vertical de la pelota:
var vpx:Number=9;
var vpy:Number=9;
El listener que llama a la función que mueve la pelota es:
pelota.addEventListener(Event.ENTER.FRAME, moverPelota);
La función moverPelota:
function moverPelota(evt:Event):void
{
pelota.x+=vpx;
pelota.y-=vpy;
if(pelota.x<0)
{
vpx*=-1;
}
if(pelota.x>stage.stageWidth-pelota.width)
{
vpx*=-1;
}
if(pelota.y<0)
{
vpy*=-1;
}
if(pelota.hitTestObject(barra))
{
reboteContraBarra();
}
}
function reboteContraBarra():void
{
var posicion:Number=pelota.x-barra.x;
var porcent:Number=(posicion / (barra.width - pelota.width)) - .5;
vpx=porcent*10;
vpy*=-1;
}
Lo que quiero es que me expliquen esas líneas dentro de la función reboteContraBarra, o sea por qué toda esa fórmula hace que la pelota al colisionar con la barra si rebota del lado izquierdo de la barra el rebote es hacia la izquierda, si el rebote es en el medio tiende a ir la pelota rectamente hacia arriba, si rebota a la derecha de la barra, la dirección de la pelota ee hacia la derecha, y lo de ir la pelota hacia la izquierda o derecha dpendee qué tanto a la izquierda o derecha de la barra colisione la pelota. Quiero que me expliquen por favor por qué esa fórmula produce ese efecto. Gracias. Nicolás