Я создаю клон понга для школы с C ++ и SFML 2.1, и у меня возникла небольшая проблема, когда мяч ударяется о левую ракетку под острым углом (он проходит).
Правая лопатка отлично работает под любым углом, и, насколько я помню, они используют один и тот же код.
Это код, который я использую для столкновения:
for (auto& it : collisionPaddles)
{
if (this->ballShape.getGlobalBounds().intersects(it->getGlobalPaddleBounds()))
{
float deltaDistance = (this->y + this->radius) - (it->y + it->height / 2);
bool fromLeft = true;
if ((ballAngle < (3*myMath::MY_PI/2) && ballAngle > myMath::MY_PI/2))
{
fromLeft = false;
}
else
{
fromLeft = true;
}
ballAngle = static_cast<float>(deltaDistance * (myMath::MY_PI/180));
if (fromLeft)
{
ballAngle = static_cast<float>(myMath::MY_PI - ballAngle);
}
moveBall(2);
}
}