Java在行上交叉特定位置

时间:2018-02-24 17:26:14

标签: java intersection rectangles

我正在努力专注于我正在制作的游戏的碰撞检测。

collisionBox是游戏玩家的矩形。 所有线条代表玩家无法通过的矩形或墙壁的特定边缘。

leftLine = new Line2D.Float((float) wall.getMinX(), (float) wall.getMaxY() , (float) wall.getMinX(), (float) wall.getMinY());
rightLine = new Line2D.Float((float) wall.getMaxX(), (float) wall.getMaxY(), (float) wall.getMaxX(), (float) wall.getMinY());
topLine = new Line2D.Float((float) wall.getMinX(), (float) wall.getMaxY(), (float) wall.getMaxX(), (float) wall.getMaxY());
botLine = new Line2D.Float((float) wall.getMinX(), (float) wall.getMinY(), (float) wall.getMaxX(), (float) wall.getMinY());

hitLeft = leftLine.intersects(collisionBox);
hitRight = rightLine.intersects(collisionBox);
hitTop = topLine.intersects(collisionBox);
hitBottom = botLine.intersects(collisionBox);

if (hitTop) {
    return Top;
} else if(hitBottom) {
    return Bottom;
} else if(hitLeft) {
    return Left;
} else if (hitRight){
    return Right;
}

我遇到的错误是因为首先评估顶部和底部墙壁然后如果我朝向顶部或底部撞到一侧(左/右)墙,那么显然前两个检查中的一个将错误地返回true而不是。 我的代码中的其他功能取决于确切知道被击中的墙的哪一侧,因此更简单的collisionBox.intersects(墙)是不够的。

虽然我理解这个问题本身,但我对任何形式的解决方案感到困惑,并且真的希望你们可以提供帮助。

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是你画四行然后独立检查每一行。一个解决方案是使用2dRectangle类,只需检查矩形的X和Y坐标,就可以知道它碰撞到了哪一侧。像这样做一个if语句很难开始工作。