在LibGDX中检测Circle是否与其上半部分或下半部分的Rectangle相交

时间:2016-03-31 17:48:53

标签: java libgdx

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

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

这种检测工作正常,但我想知道是否有办法检测圆是否与矩形的上半部分或矩形的下半部分相撞,并根据具体情况进行相应的处理。

所以也许像

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

但不幸的是,它会返回一个浮点数,而交集类不接受它。

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

1 个答案:

答案 0 :(得分:3)

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

private final 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
    }
}