我有两个矩形。在我的代码中,我可以使用Rect.intersects()
方法检查何时发生冲突,但无法确定它来自哪一侧。我在下面尝试过这些,它适用于X轴,但不适用于Y轴。
if(R1.getTranslateX() + R1.getWidth() < R2.getTranslateX() + (R2.getWidth() / 2) ) {
//Collision from left side
}
if(R1.getTranslateX() > R2.getTranslateX() + (R2.getWidth() / 2) ) {
//Collision from right side
}
if(R1.getTranslateY() + R1.getHeight() < R2.getTranslateY() + (R2.getHeight() / 2)) {
//Collision from top side
}
if(R1.getTranslateY() > R2.getTranslateY() + (R2.getHeight() / 2)) {
//Collision from bottom side
}
代码不会越过X轴来检查Y轴侧...有什么想法吗?
答案 0 :(得分:0)
左/右和上/下相对于R1。在所有情况下都无法确定碰撞发生的方向,而又不知道物体的移动方向。正如我所见,以下是最好的检测手边信息碰撞方向的方法。考虑矩形R1。我们将对检测到碰撞之前最多相交的碰撞矩形进行估计。我们称这个余量为m。让我们检测此illustration之后的冲突。我们看到,边距越小,拐角处无法确定碰撞方向的区域就越小。缩小边距的问题在于,如果矩形相交的距离大于边距所允许的范围,则我们根本不会检测到碰撞的方向。参见下面的代码。
int m = [an estimate on how much the rectangles will intersect at most]; //margin
//x-direction
if(R1.getTranslateX() + m > R2.getTranslateX() + R2.getWidth()){
//Collision from left side
}else if(R1.getTranslateX() + R1.getWidth() - m < R2.getTranslateX()){
//Collision from right side
}
//y-direction
if(R1.getTranslateY() + m > R2.getTranslateY() + R2.getHeight()){
//Collision from top side
}else if(R1.getTranslateY() + R1.getHeight() - m < R2.getTranslateY()){
//Collision from bottom side
}