Pong的2D碰撞检测

时间:2012-05-30 01:32:28

标签: c++ graphics collision-detection

我正在尝试制作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,width和height。在接收端我有......

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

你可以看到球的两侧没有碰撞,只有点。

我希望这会有所帮助

1 个答案:

答案 0 :(得分:1)

  

ball-&gt; vellx = -ball-&gt; vellx;

这是不正确的。

当检测到碰撞时,只有当球向桨叶移动时才需要反转(x)速度。如果球已从球拍移开不执行任何操作不会修改速度

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

P.S。还有其他一些你可以调整的东西(比如让球在角落里正确反弹,根据桨速调整球速等),但这是另一个故事...