Привет, я написал этот простой алгоритм обнаружения столкновений и отскока, но столкновение обнаруживает y, как если бы это была ось x.
bool Ball::DetectCollision(Paddle p)
{
if(GetPosition().y >= p.GetPosition().y + p.GetSize().y
|| GetPosition().y + GetSize().y <= p.GetPosition().y
|| GetPosition().x >= p.GetPosition().x + p.GetSize().x
|| GetPosition().x + GetSize().x <= p.GetPosition().x)
{
return false;
}
if(GetPosition().y <= p.GetPosition().y + p.GetSize().y )
{
Bounce(-1,1);
}
else if(GetPosition().y + GetSize().x >= p.GetPosition().y)
{
Bounce(-1,1);
}
else if(GetPosition().x + GetSize().x >= p.GetPosition().x )
{
Bounce(1,-1);
}
else if(GetPosition().x <= p.GetPosition().x + p.GetSize().x)
{
Bounce(1,-1);
}
return true;
}
void Ball::Bounce(int a, int b)
{
velocity = sf::Vector2f(velocity.x * a,velocity.y * b);
}
сначала вроде бы работает, потом я обнаружил, что он работает только по одной оси (если мяч ударяется о ракетку снизу или сверху, он не отскакивает должным образом, а отскакивает, как будто ударяется о переднюю поверхность ракетки). весло -> ^|)