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

标签 c++ algorithm sfml pong

嗨,我写了这个简单的碰撞检测和弹跳算法,但是碰撞检测到 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/

相关文章:

android - 需要算法 SQLite Android

c - 旋转矩形阵列45度

linux - Linux 上缺少 SFML/OpenGL.hpp

c++ - 使用 constexpr 函数作为参数时,enable_if 在 Visual Studio 中不起作用

c++ - 实现 parallel_for_each 函数

algorithm - 字符串的成对独立哈希函数?

c++ - Collision c++ 2d 游戏,防止玩家进入瓷砖

c++ - (Visual Studio) 尝试将 Microsoft 库与 SFML 库静态链接时出现大量链接器错误

C++ 继承 : Calling Base Class Constructor In Header

c++ - 复制文件时如何调用取消? (使用复制文件ex函数配合复制进度例程回调函数)