Как заставить мяч отскочить от весла под определенным углом в зависимости от того, где он попал в весло?

Таким образом, у меня есть два отдельных определения столкновения как для весла игрока, так и для противника, и в весле игрока я прокомментировал то, что кажется математическим вычислением, необходимым для отскока мяча в зависимости от места его удара. Код, который не комментируется, просто отскакивает шарик по экрану, как и следовало ожидать, когда вы изменяете скорость (это скорость — значение с плавающей запятой) на каждом отскоке. Итак, для начала, является ли закомментированная формула действительно правильной формулой, и если да, то нужно ли ее применять к xSpeed ​​и ySpeed, когда она сталкивается с веслом?

Когда я увидел эту формулу, в качестве аргумента использовались BallAngle или PaddleAngle (не помню, если честно). Теперь, если это правильная формула, как мне вообще получить этот угол? Я просто использую целые числа там (для тестирования), потому что я не знаю, как получить угол.

if (ball.getPosition().x < (player.getPosition().x) //PLAYER COLLISION DETECTION
&& (ball.getPosition().y + (ball.getRadius() * 2)) >= player.getPosition().y
&& ball.getPosition().y <= (player.getPosition().y + player.getSize().y))
{
xSpeed = -xSpeed;
//xSpeed = xSpeed*cos(91);
//ySpeed = ySpeed*sin(90);
ball.move(xSpeed, ySpeed);
}

if (ball.getPosition().x > enemy.getPosition().x - 30 //ENEMY COLLISION DETECTION
&& (ball.getPosition().y + (ball.getRadius() * 2)) >= enemy.getPosition().y
&& ball.getPosition().y <= (enemy.getPosition().y + enemy.getSize().y))
{
xSpeed = -xSpeed;
ball.move(xSpeed, ySpeed);
}

1

Решение

cos(91) чуть меньше -1, вероятно, он предназначен для изменения направления X и замедления его из-за удара. sin(90) почти один, так что опять-таки, по-видимому, должен немного его замедлить.

Конечно, эти функции на самом деле довольно дороги для вычисления, так что вы можете просто жестко закодировать значения.

const float xBounce = -0.99436746092
const float yBounce = 0.8939966636
...
xSpeed *= xBounce;
ySpeed *= yBounce;
ball.move(xSpeed, ySpeed);
0

Другие решения


По вопросам рекламы [email protected]