2017-07-01 55 views
0

這是我有一段時間的問題,但從來沒有打擾問。在哪裏做碰撞檢測

想象一下,我有2個物體。 1個靜態,另一個可移動(由玩家)。

衝突邏輯在那裏存在?

詳細說明;在我的狀態下,我有一個組件的列表。這些可以是NPC的,靜態的物體,玩家,和剛纔的一切是

private List<Component> _gameComponents; 

如果我做的球員類的檢查,想必玩家將需要知道_gameComponents的名單,然後我會在更新時進行檢查,以便相應地更改速度。

有沒有我失蹤的標準?

編輯1:我剛纔讀到,我應該有更新和渲染檢查所有碰撞之間的一步。我會試一試,看看會發生什麼。

回答

1

讓每個可物理處理的組件繼承自定義interface,如ICollidable

將每個ICollidable存儲在與組件列表分開的List<T>中。而且每個ICollidable即使在第三個集合中也不是靜態的。

有第三個類只處理整個遊戲的物理部分並遍歷非靜態列表。這樣您只更新可以移動的內容,並且可以將其與每個包含每個ICollidable的列表中的每個對象進行比較。

確保您只檢查移動物體範圍內的物體的碰撞。檢查不會碰撞的對象的碰撞是沒有意義的。

我總是在更新之前檢查碰撞情況,嘗試最適合您的方法。