gpt4 book ai didi

c++ - Pong - 球弹跳和碰撞检测算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:35 32 4
gpt4 key购买 nike

嗨,我写了这个简单的碰撞检测和弹跳算法,但是碰撞检测到 y 就好像它是 x 轴一样

enter image description here

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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com