使用LibGDX,我有一个Circle对象与一个Rectangle对象碰撞。我使用Libgdx随附的Intersector类检测到这种碰撞,如下所示:

 if(Intersector.overlaps(circle, rectangle)){
        do something
    }


这种检测效果很好,但是我想知道是否有一种方法可以检测圆是否与矩形的上半部或矩形的下半部发生碰撞,并根据其进行相应的操作。

所以也许像

if(Intersector.overlaps(circle, rectangle.getHeight() - rectangle.getHeight() / 2)){
    do something
}


但是不幸的是,这将返回一个浮点数,交集类不接受。

任何有关如何实现这一目标的想法将不胜感激。

最佳答案

保留一个可重用的额外矩形实例:

私有最终Rectangle tmp = new Rectangle();

当圆与您关心的矩形A相交时,可以将临时矩形设置为矩形A的上半部分,并检查是否存在碰撞。结果告诉您碰撞的发生位置是顶部还是底部。 (但是,如果圆与上半部和下半部相交,则顶部也会发生碰撞,因此请记住这一点。)

if(Intersector.overlaps(circle, rectangle)){
    tmp.set(rectangle.x, rectangle.y + rectangle.height/2, rectangle.width, rectangle.height/2);
    if (Intersector.overlaps(circle, tmp){
        //top half (or both top and bottom) hit
    } else {
        //bottom half hit
    }
}

09-27 11:33
查看更多