如何确定(Java)发生了哪个侧面碰撞

时间:2018-12-07 10:09:56

标签: java collision

我有两个矩形。在我的代码中,我可以使用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轴侧...有什么想法吗?

1 个答案:

答案 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
}