Eu tenho esse jogo "estilo Breakout".
Eu tenho um canhão no centro, blocos ao redor do canhão e almofadas ao redor dos blocos. É assim que o jogo se parece:
Consegui obter a colisão por pixel e minha bola " reflete " no contato com os blocos com a seguinte matemática:
Ball.Direction = 2 * (Block.Direction - Ball.Direction) + 180;
Onde a linha azul é a direção da bola e a linha preta (linha de base) é a superfície do bloco.
Direção é um ângulo expresso em radiano (que pode ser convertido em graus, é claro).
A bola é movida por:
// Event.ENTER_FRAME
x += Math.sin(Direction) * Velocity;
y -= Math.cos(Direction) * Velocity;
Por enquanto, tudo bem.
Meu problema vem agora, com as almofadas (os três blocos escuros e grandes ao redor dos pequenos blocos coloridos).
Quando eles se viram, o ângulo da superfície muda.
Mais do que isso, a bola deve bater nos lados também, então, como posso medir a direção do golpe e a nova direção do movimento da bola?
ps : Se necessário, eu posso fornecer código e um swf jogável.
Editar
Ok, o problema com ângulos foi resolvido com Vetores , mas ainda tenho o problema com lados e colisão traseira.
Vou abrir outra pergunta e vincular aqui.