我真的很努力地检测Car类的两个Car对象之间的碰撞。该代码很长,因此很难将其全部包含在内。我已经包括了碰撞方法。如果您能发现任何逻辑错误,而我认为这是我的问题,那将是个好消息。如果您需要更多上下文,我问了一个较早的类似问题,其中包括更多的代码here,但我仍然没有解决方案。
我想要做的是告诉我两辆车何时接触。它所做的只是打印“无冲突”,即使有冲突也是如此。
冲突方法(环境类内部)-
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;
}
答案 0 :(得分:1)
您可能要更改检测“范围”。如果您查看检测汽车的方式,那么您只在寻找精灵/矢量所处的坐标,如果像素多于几个,它们将相对难以碰撞。尝试从Car A
的{{1}}中找到width/length
的位置。
答案 1 :(得分:0)
我认为平等方法是不正确的。并且它引起一些碰撞检测问题。 我们不能假定具有相同属性的两个Car是同一对象。 例如:
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所说,要正确捕获碰撞,您必须计算对象的长度或宽度。