簡體   English   中英

Java中兩個對象之間的碰撞檢測

[英]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 Bwidth/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM