【发布时间】:2015-04-29 00:29:02
【问题描述】:
if(pl.y+pl.height >= a.y && pl.x+pl.width >= a.x+1 && pl.x <= a.x+a.width-1 && pl.y<=a.y) { //TOP
colUP=true;
}
else colUP=false;
if(pl.y <= a.y+a.height && pl.x+pl.width >= a.x+1 && pl.x <= a.x+a.width-1 && pl.y+pl.height>=a.y+a.height) { //BOTTOM
colDOWN=true;
}
else colDOWN=false;
if(pl.x <= a.x+a.width && pl.x+pl.width>a.x+a.width && pl.y+pl.height >= a.y && pl.y <= a.y+a.height){ //RIGHT
colRIGHT=true;
}
else colRIGHT=false;
if(pl.x+pl.width >= a.x && pl.x<a.x && pl.y+pl.height >= a.y && pl.y <= a.y+a.height){ //LEFT
colLEFT=true;
}
else colLEFT=false;
我设置了一个调试程序,它会告诉我 4 个布尔值中的哪一个被设置为 true,并且当我将框 'pl' 放在框 'a' 的顶部时,它们没有显示 colUP 不等于 true ,并且它们只会在盒子 'pl' 与几个盒子 'a' 碰撞的奇怪情况下实现,并且某一侧的碰撞可能是真实的,但如果 colUP 为真,则 colRIGHT 出于某种原因为真. (这段代码在一个 for 循环中,它遍历一个 Rectangle 数组列表并将当前 Rectangle 设置为等于变量 'a' ,因此 a.x 是框的 x 位置)
【问题讨论】:
-
请描述您想要发生的事情。视觉效果也会有所帮助。
-
每个 if 语句检查矩形 1 的一侧是否已通过矩形 2 的另一侧。因此它检查矩形 1 的右侧是否位于矩形 2 左侧的右侧,并且其他方面也一样。我的主要目标是让这种碰撞与我正在创建的马里奥游戏一起工作。所以对于只有顶面碰撞的方块,我可以关闭底、左、右的侧面碰撞。
-
所以你不想有规律的矩形碰撞?您希望能够测试碰撞发生在哪一侧?
-
我怀疑这个错误在当前代码块之外。您能否提供更多代码,例如检查所有碰撞的循环?
标签: java algorithm collision-detection