簡體   English   中英

一些碰撞檢測建議

[英]Some collision detection advice

我正在開發一個基於圖塊的平台游戲,該游戲目前使用邊界框和重疊檢查進行碰撞檢測。 我發現這種方法不靈活。 我希望根據圖塊的類型具有不同的碰撞響應。

我的新想法是使用9個點圍繞我的播放器對象,並檢查這些點中的哪個點在圖塊的邊界內。 每個角點一個點,每側一個點,中間一個點。 每種圖塊類型將使用不同的規則集進行沖突處理。

但是,每種圖塊類型都必須使用一組復雜的條件語句進行碰撞測試-可能過於復雜。 有指導嗎?

這聽起來像是策略模式的案例: http : //en.wikipedia.org/wiki/Strategy_pattern

定義一個“流程沖突”接口,然后為不同的沖突規則定義該接口的多種實現。

然后,對於每個圖塊,只需設置setCollisionStrategy(MyRuleHere)

要檢查是否有碰撞,您只需確定瓷磚即可

if (tile.getCollisionStrategy.collide(player)) {
  // Collision
}

collide方法甚至可以為不同類型的碰撞返回一個枚舉-或返回一個更復雜的對象-甚至處理碰撞本身並在播放器中進行更改。 正確的方法取決於您的整體體系結構。

准確的碰撞檢測通常會對性能產生巨大影響 ,因此僅提高准確性就無法在游戲中實現。

一個很好的方法是為每個圖塊鏈接碰撞檢測策略
諸如邊界框檢查之類的粗略策略可以非常迅速地執行,並且可以排除肯定沒有沖突的情況(無論如何這是最常見的情況)。

策略越精細,涉及的計算就越多,但是目標仍然是快速檢測某些碰撞/無碰撞情況並避免計算時間。

在此處輸入圖片說明

這個例子展示了一些常見的策略,您可以將它們鏈接起來以獲得快速准確的碰撞檢測

  1. 邊界框(最快)
  2. 形狀(多邊形,圓形,貝塞爾曲線等)
  3. Alpha通道(最慢,最准確)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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