Caja de detección de colisión y rebote
Estoy haciendo pong, y me resulta muy difícil escribir un algoritmo que haga rebotar la pelota en las cuatro paredes correctamente (me ocuparé de anotar más adelante, porque solo una parte de los lados oeste + este serán goles). Así que en este momento quiero que la pelota rebote alrededor de la caja.
Detectar si la pelota ha golpeado una pared es fácil, pero tengo problemas para calcular el nuevo ángulo.
Esto es lo que se me ocurrió hasta ahora:
if(dstY == 0) {
// North wall
if(angle < 90) {
newAngle = angle + 90;
} else {
newAngle = angle - 90;
}
} else if(dstX == maxWidth) {
// East wall
if(angle < 90) {
newAngle = angle + 270;
} else {
newAngle = angle + 90;
}
} else if(dstY == maxHeight) {
// South wall
newAngle = angle + 90;
} else if(dstX == 1) {
// West wall
if(angle < 270) {
newAngle = angle - 90;
} else {
newAngle = angle - 270;
}
}
Eso solo funciona para aproximadamente la mitad de las colisiones, y se ve realmente feo. Estoy seguro de que esto debería ser realmente simple y que se ha hecho muchas veces antes.
En mi código, dstX / dstY son las coordenadas de destino X / Y. X = 0 e y = 0 en la parte superior izquierda.