Таким образом, у меня есть два отдельных определения столкновения как для весла игрока, так и для противника, и в весле игрока я прокомментировал то, что кажется математическим вычислением, необходимым для отскока мяча в зависимости от места его удара. Код, который не комментируется, просто отскакивает шарик по экрану, как и следовало ожидать, когда вы изменяете скорость (это скорость — значение с плавающей запятой) на каждом отскоке. Итак, для начала, является ли закомментированная формула действительно правильной формулой, и если да, то нужно ли ее применять к 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);
}
cos(91)
чуть меньше -1, вероятно, он предназначен для изменения направления X и замедления его из-за удара. sin(90)
почти один, так что опять-таки, по-видимому, должен немного его замедлить.
Конечно, эти функции на самом деле довольно дороги для вычисления, так что вы можете просто жестко закодировать значения.
const float xBounce = -0.99436746092
const float yBounce = 0.8939966636
...
xSpeed *= xBounce;
ySpeed *= yBounce;
ball.move(xSpeed, ySpeed);