【发布时间】:2014-12-26 12:20:19
【问题描述】:
您好,我编写了这个简单的碰撞检测和弹跳算法,但是碰撞检测 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);
}
起初它似乎在工作,我发现它只在一个轴上工作(如果球从底部或顶部击中桨,它不会正确反弹并且它会像撞到前面一样反弹桨的表面 -> ^|)
【问题讨论】: