乒乓球的 2D 碰撞检测



我正在尝试制作一个Pong游戏。我已经把所有东西都画到屏幕上,弹开墙壁的球,并确保桨只能在地图上。我遇到的一个问题是碰撞检测。如果球(实际上是一个正方形)击中中间的球拍,而球的任何部分都没有挂在球拍的边缘,我正在使用的算法效果很好。如果球击中球拍的角落或一些球挂在球拍上,那么球就会进入球拍并且不会反弹回来。这是我的算法...

bool CheckCollision(float Ax,float Ay,float Aw,float Ah,float Bx,float By,
float Bw,float Bh) {
    if(Ax>Bx+Bw) {
        return(false);
    }else if(Ax+Aw<Bx) {
        return(false);
    }else if(Ay>By+Bh) {
        return(false);
    }else if(Ay+Ah<By) {
        return(false);
    }
    return(true);
} 

A 和 B 代表不同的对象,x、y、w 和 h 代表该特定对象的 x pos、y pos、宽度和高度。在接收端,我有...

if(CheckCollision(ball->x,ball->y,ball->width,ball->height,paddle->x,paddle->y,
paddle->width,paddle->height)) {
    ball->vellx = -ball->vellx;
}

这就像我说的那样,如果球击中中间的球拍。

如果你明白这一点(因为我知道我不是最好的文字),有什么办法可以让球不会误入球拍?如果没有,我可以使用其他算法吗?请记住,这只是 2D。

这是正在发生的事情的屏幕截图

http://gyazo.com/920d529217864cca6480a91b217c9b61

正如你所看到的,球的侧面没有碰撞,只有点。

我希望这有帮助

球->维尔克斯 = -球->维尔克斯;

这是不正确的。

检测到碰撞时,只有当球向球拍移动时,您才需要反转 (x) 速度。如果球已经远离球拍,则不执行任何操作也不要改变速度

如果你在每次碰撞时盲目地反转速度,球就会卡在球拍中。

附言您还可以调整其他一些内容(例如使球在角落中正确反弹,根据球拍速度调整球速等),但那是另一回事了......

相关内容

  • 没有找到相关文章

最新更新