我有我創建的遊戲的圖像表示的實體對象。我能夠檢測到涉及矩形的簡單碰撞,但我不知道如何阻止物體相互移動...(Java)通過牆壁停止移動
我不需要太多的物理模擬。我只是不希望任何物體能夠通過對方。如果實體遇到牆,則停止。如果一堵牆碰到一個實體,牆就會停下來。
我該怎麼做呢?
我有我創建的遊戲的圖像表示的實體對象。我能夠檢測到涉及矩形的簡單碰撞,但我不知道如何阻止物體相互移動...(Java)通過牆壁停止移動
我不需要太多的物理模擬。我只是不希望任何物體能夠通過對方。如果實體遇到牆,則停止。如果一堵牆碰到一個實體,牆就會停下來。
我該怎麼做呢?
簡單的答案就是列出所有的「實體」並檢查它們是否發生碰撞。 使每個實體知道它是自己的半徑(用於圓形碰撞)或邊界框(用於矩形碰撞)。 然後有一個像下面這樣的循環:
for (int x = entityList.count; i < 0; i--)
{
for (int y = entityList.count; i < 0; i--)
{
if (x == y) continue; // Make sure you don't check to collide with yourself
CheckIfCollides(entityList[x], entitylist[y]);
}
}
編輯: 你可以有碰撞碼每一個實體試圖更新它的位置和檢查,以確保新位置是有效的,並沒有按」時間內跑去不會碰撞任何東西。
我曾考慮過檢查下一個潛在位置是否可能,但這會使得如果我以與牆壁成一定角度,物體完全不會移動,當它移動到允許移動的方向時,就好像在牆上滑動一樣。 – Linkxgl
@Linkxgl您還可以檢查「障礙物的哪一側」,並且只能朝朝向障礙物的方向禁止移動。即。你首先檢查整個運動,如果碰撞,你檢查如果你只在X軸上移動等等。 另一種方法是首先移動然後沿對撞機邊緣的法線移回來「修復」碰撞。 – TheDespite
看看[這篇文章](http://www.gamasutra.com/view/feature/3190/advanced_collision_detection_.php)。具體來說,第一種情況對你來說可能很簡單。本質上創建一個邊界框,覆蓋物體穿過的區域並檢查是否存在碰撞 –