【问题标题】:Java Intersecting Specific Locations on LinesJava 与线上的特定位置相交
【发布时间】:2018-02-24 17:26:13
【问题描述】:

我正在尝试专注于我正在创建的游戏的碰撞检测。

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(wall) 是不够的。

虽然我了解问题本身,但我对任何形式的解决方案都感到困惑,真的希望你们能提供帮助。

【问题讨论】:

    标签: java intersection rectangles


    【解决方案1】:

    我认为这里的问题是您要绘制四条线,然后分别检查每条线。一个解决方案是使用2dRectangle 类并简单地检查矩形的X 和Y 坐标以了解它在哪一侧发生了碰撞。执行这样的 if 语句将很难发挥作用。

    【讨论】:

    • 我不太确定我明白了,对不起。考虑以下仅在collisionBox.intersects(wall) 时运行的适配。 hitLeft = collisionBox.getMaxX() > wall.getMinX(); hitRight = collisionBox.getMinX() wall.getMinY(); if 语句将始终返回 Top,因为它是第一个求值的,如果存在交集,则 hitTop 实际上始终为真。
    • 是的,问题是您正在绘制四条不同的线。相反,您可以拥有一个矩形对象并检查该矩形的 X 和 Y 值,而不是单独检查每一行。 if 语句不会按照您的意愿工作,因此您需要重新考虑您的方法。
    猜你喜欢
    • 2017-11-25
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多