[英]Collision detection between two objects in java
我真的很難檢測到Car類的兩個Car對象之間的碰撞。 該代碼很長,因此很難將其全部包含在內。 我已經包括了碰撞方法。 如果您能發現任何邏輯錯誤,而我認為這是我的問題,那將是個好消息。 如果您需要更多一點,我問一個較早類似的問題,其中包括了很多的代碼在這里 ,但我仍然沒有一個解決方案..
我想要做的是告訴我兩輛車何時接觸。 它所做的只是打印“無沖突”,即使有沖突也是如此。
碰撞方法(環境類內部)-
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 B
的width/length
查找Car A
的位置。
我認為平等方法是不正確的。 並且它引起一些碰撞檢測問題。 我們不能假定具有相同屬性的兩個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所說,要正確捕獲碰撞,您必須計算對象的長度或寬度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.