Java 中两个对象之间的冲突检测



我真的很难检测汽车类的两个汽车对象之间的碰撞。代码很长,因此很难全部包含。我已经包括了我的碰撞方法。如果你能发现任何逻辑错误,我认为这是我的问题,那就太好了。如果您需要更多上下文,我问了一个较早的类似问题,其中包括更多的代码,但我仍然没有解决方案。

我希望它做的是告诉我两辆车何时接触。它所做的只是打印"无碰撞",即使有碰撞。

碰撞方法(内部环境类) -

public boolean collision() {
    double MIN_DIS = 0.1;
    for (Car a : cars) {
        for (Car b : cars) {
            if (!(a.equals(b)) && (Math.abs(a.getPosition() - b.getPosition()) < MIN_DIS)) {
                return true;
            }
        }
    }
    return false;
}

调用方法(在我添加汽车的主内部)-

    if(e.collision() == true) {
        System.out.println("collision");
    } else {
        System.out.println("no collision");
    } 

等于方法(我决定使用!(a == b) 虽然现在) -

public boolean equals(Object obj) {
    if (obj instanceof Car){
        Car car = (Car) obj;
        return car.getPosition() == this.position && car.getLane() == this.lane && car.getColor().equals(this.color) && car.getSpeed() == this.speed; 
    }
    return false;
}

您可能需要更改检测"范围"。如果你看一下你检测汽车的方式,你只是在寻找精灵/矢量所在的坐标,如果像素超过几个,它们将相对难以碰撞。尝试从Car Bwidth/length中找到Car A的位置。

我认为相等方法不正确。它会导致一些碰撞检测问题。我们不能假设具有相同属性的两辆汽车是同一个对象。例如:

e.add(new Car(  0, 63, 2, new Color(1.0f,1.0f,1.0f, 1.0)));
e.add(new Car(  0, 63, 2, new Color(1.0f,1.0f,1.0f, 1.0)));
在这种情况下,存在

冲突,但永远不会被检测到,因为通过实现的 equals 方法实现的两个对象是相同的。

在这样的上下文中,游戏引擎或建模系统,使用 ID 区分世界中的每个对象很有用,因为每个实例都是唯一的。

此外,正如@Jason所说,要正确捕获碰撞,您必须计算物体的长度或宽度。

最新更新