Tengo este juego de "estilo de ruptura".
Tengo un cañón en el centro, bloques alrededor del cañón y almohadillas alrededor de los bloques. Así es como se ve el juego:
Me las arreglé para obtener la colisión por píxel y mi bola "se refleja " en contacto con los bloques con las siguientes matemáticas:
Ball.Direction = 2 * (Block.Direction - Ball.Direction) + 180;
Donde la línea azul es la dirección de la bola, y la línea negra (línea base) es la superficie del bloque.
La dirección es un ángulo expresado en radianes (que se puede convertir a grados, por supuesto).
La pelota es movida por:
// Event.ENTER_FRAME
x += Math.sin(Direction) * Velocity;
y -= Math.cos(Direction) * Velocity;
Hasta aquí todo bien.
Mi problema viene ahora, con las almohadillas (los 3 bloques oscuros y grandes alrededor de los pequeños bloques de colores).
A medida que giran, el ángulo de la superficie cambia.
Más que eso, la pelota también debe golpear los lados, entonces, ¿cómo puedo medir la dirección del golpe y la nueva dirección de movimiento de la pelota?
ps : si es necesario, puedo proporcionar código y un swf jugable.
Editar
Ok, el problema con los ángulos se resolvió con vectores , pero todavía tengo el problema con los lados y la colisión trasera.
Abriré otra pregunta para eso y la vincularé aquí.