[英]Some collision detection advice
我正在開發一個基於圖塊的平台游戲,該游戲目前使用邊界框和重疊檢查進行碰撞檢測。 我發現這種方法不靈活。 我希望根據圖塊的類型具有不同的碰撞響應。
我的新想法是使用9個點圍繞我的播放器對象,並檢查這些點中的哪個點在圖塊的邊界內。 每個角點一個點,每側一個點,中間一個點。 每種圖塊類型將使用不同的規則集進行沖突處理。
但是,每種圖塊類型都必須使用一組復雜的條件語句進行碰撞測試-可能過於復雜。 有指導嗎?
這聽起來像是策略模式的案例: http : //en.wikipedia.org/wiki/Strategy_pattern
定義一個“流程沖突”接口,然后為不同的沖突規則定義該接口的多種實現。
然后,對於每個圖塊,只需設置setCollisionStrategy(MyRuleHere)
。
要檢查是否有碰撞,您只需確定瓷磚即可
if (tile.getCollisionStrategy.collide(player)) {
// Collision
}
collide方法甚至可以為不同類型的碰撞返回一個枚舉-或返回一個更復雜的對象-甚至處理碰撞本身並在播放器中進行更改。 正確的方法取決於您的整體體系結構。
准確的碰撞檢測通常會對性能產生巨大影響 ,因此僅提高准確性就無法在游戲中實現。
一個很好的方法是為每個圖塊鏈接碰撞檢測策略 。
諸如邊界框檢查之類的粗略策略可以非常迅速地執行,並且可以排除肯定沒有沖突的情況(無論如何這是最常見的情況)。
策略越精細,涉及的計算就越多,但是目標仍然是快速檢測某些碰撞/無碰撞情況並避免計算時間。
這個例子展示了一些常見的策略,您可以將它們鏈接起來以獲得快速准確的碰撞檢測 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.