A ver, espero poder ayudarte. Lo que tenés que considerar es cambiar un poco el tema del ángulo.
Bien, pensá en esto, las paletas tienen un alto determinado, que conseguís con la propiedad _height.
Ahora, si el punto de anclaje está en el centro de las paletas (lo que simplificaría mucho el código), obtenés el punto más alto y el punto más bajo de la paleta con este código:
Código :
ypos = paleta._y;
altura = paleta._height;
//
puntoMax = ypos + altura / 2;
puntoMin = ypos - altura / 2;
Ahora, podés imaginar a la paleta dividida en 2 por una línea horizontal que atraviese el centro de la paleta. Cuando la pelota la golpee va a desviarse de su trayectoria y la desviación debería ser relativa a la distancia respecto al centro de la paleta.
Cúal es la desviación? Bien, hacés un cálculo que diga la distancia en y entre el centro de la pelota y el centro de la paleta. Entonces, cambiás el ángulo en consecuencia.
Si la pelota golpea en el centro de la paleta, el nuevo ángulo podría ser, *= -1. Pero si pega en el borde, pasaría a ser *= -2
Ahora, pensá en eso. Hay un error de concepto. Lo encontraste?
Suponiendo que lo hayas pensado, habrás descubiertto que la velocidad de la pelota varía junto con el ángulo.
Oh sorpresa, para variar el ángulo tenés que hacer más modificaciones, como variar xball por -1, como venís haciendo, pero yball por 0.5. Pero la velocidad de la pelota va a variar.
Obstáculo insalvable? Casi.
Podés hacer un código muy superior empleando ángulos reales y calculando la posición de la pelota en base a la trigonometría.
Si, ya sé que requiere conocimientos en la matería.
Pero no muchos.
Lo primero es definir la velocidad real a la que se va a mover la pelota. Entonces, declaramos la variable velocidad. Más abajo, lo que hacemos es cambiar velX y velY empleando la variable velocidad y el ángulo en que se mueve la pelota (en radianes). El código sería éste:
Código :
var velocidad:Number = 10;
var velX:Number;
var velY:Number;
var angulo:Number;
//
velX = velocidad * Math.sin (angulo);
velY = velocidad * Math.cos (angulo);
//
bola._x += velY;
bola._y -= velY;
Ahora, lo único que te queda por hacer es cambiar la variable angulo y ver como la pelota se mueve siempre a la misma velocidad y en cualquier dirección. No te olvides de pensar en la paleta dividida para saber cuánto vas a modificar el ángulo y listo. El resto te lo dejo a vos, pero, pensar en éste tipo de cosas me dio una idea y si encuentro tiempo voy a empezar un tutorial sobre cómo armar éste juego y un Arkanoid, con suerte lo termino y lo posteo dentro de muy poco.