嗨,我写了这个简单的碰撞检测和弹跳算法,但是碰撞检测到 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);
}
一开始它似乎工作正常,但我发现它只能在一个轴上工作(如果球从底部或顶部击中 Racket ,它不会正确弹跳,它会像击中前部一样弹跳桨的表面 -> ^|)
最佳答案
在我看来这条线
else if(GetPosition().y + GetSize().x >= p.GetPosition().y)
应该是
else if(GetPosition().y + GetSize().y >= p.GetPosition().y)
注意从 GetSize().x 到 GetSize().y 的变化
看看是否能解决问题。干杯!
关于c++ - Pong - 球弹跳和碰撞检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657046/