Я делаю понг, и мне действительно трудно написать алгоритм, который правильно отскакивает мяч от четырех стенок (позже я буду заниматься забиванием, потому что только часть с запада + восточной стороны будет голом) , Поэтому в данный момент я хочу, чтобы мяч отскочил от коробки.
Легко определить, попал ли мяч в стену, но у меня возникают проблемы с вычислением нового угла.
Это то, что я до сих пор придумал:
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;
}
}
Это работает только для примерно половины столкновений и выглядит действительно безобразно. Я уверен, что это должно быть действительно просто и что это было сделано много раз прежде.
В моем коде dstX / dstY - координаты назначения X / Y. X = 0 и y = 0 вверху слева.