java - 使用算法和 Rectangle.intersects (java/lwjgl) 的碰撞检测

标签 java algorithm boolean collision-detection collision

我知道这是一个经常发生的问题,但我似乎找不到问题所在。我到处都找过了!

我用于碰撞检测的算法是这样的:

if( (ent1.getX() >= ent2.getX() && ent1.getX() <= (ent2.getX() + ent2.getWidth())) ||
       ((ent1.getX() + ent1.getWidth()) >= ent2.getX() && (ent1.getX() + ent1.getWidth()) <= (ent2.getX() + ent2.getWidth())) ){

        //Now we look at the y axis:
        if( (ent1.getY() >= ent2.getY() && ent1.getY() <= (ent2.getY() + ent2.getHeight())) ||
           ((ent1.getY() + ent1.getHeight()) >= ent2.getY() && (ent1.getY() + ent1.getHeight()) <= (ent2.getY() + ent2.getHeight())) ){
            //The sprites appear to overlap.
            return true;
        }else{
            return false;
        }
    }

这个算法确实有效,我在调试器中发现了问题所在......

最佳答案

例如:

public static boolean intersects(Rectangle rect1, Rectangle rect2) {
    double left1 = rect1.getX();
    double top1 = rect1.getY();
    double right1 = rect1.getX()+rect1.getWidth();
    double bottom1 = rect1.getY()+rect1.getHeight();
    double left2 = rect2.getX();
    double top2 = rect2.getY();
    double right2 = rect2.getX()+rect2.getWidth();
    double bottom2 = rect2.getY()+rect2.getHeight();
    return (
        left1 < right2
        && top1 < bottom2
        && right1 > left2
        && bottom1 > top2
    );
}

这是“边界独占”。

关于java - 使用算法和 Rectangle.intersects (java/lwjgl) 的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28202704/

相关文章:

java - 如何在 Java 中比较字符串?

java - 从终端运行 java 项目时没有这样的文件

c++ - 返回 2 的幂的数字的幂的最快算法是什么?

java - 桶排序中的桶大小

algorithm - 编辑距离算法(可以对整个子字符串进行更改)

boolean - 在 Netlogo 中,是否可以将 boolean 变量列表从 true/false 转换为 1/0?

java - 使用 FillLayout 隐藏父级中的复合控件

java - 不同类型的列表作为参数

.net - 两个成员枚举与 boolean 值

java - 在数组中搜索特定字符串