我正在尝试制作乒乓球游戏。我已将所有内容绘制到屏幕上,反弹墙壁上的球,并确保桨只能在地图中。我遇到的一个问题是碰撞检测。如果球(实际上是一个正方形)击中中间的球拍,而球的任何部分没有悬在球拍的边缘,我使用的算法效果很好。如果球击中桨的角或一些球挂在桨上,那么球就会进入桨中并且不会弹回。这是我的算法...
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 位置、y 位置、宽度和高度。在接收端,我有...
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
如您所见,球的两侧没有碰撞,只有点。
我希望这有帮助