[英]2D Tile / Time based collision detection
我目前正在基於2D瓷磚地圖創建一款塔防游戲。
游戲循環基於HTML5-API requestAnimationFrame,因此我使用的是基於時間的動畫。
現在的問題是,如何才能有效地檢查碰撞? 如果增量太高,子彈可能會跳到敵人身后而不會觸發碰撞。 子彈和敵人各有不同的移動速度。
到目前為止,我發現的唯一可能的解決方案是實施“固定時間步長物理學”,感覺有些怪異。 還有其他解決方案嗎?
我想一些適合該主題的關鍵字/算法已經可以幫上很多忙!
在每個更新周期中,沿着子彈軌跡畫一條線。 還要為使用相同方法可能移動的任何目標畫一條線,如果這些線相交則發生碰撞(還要檢查固定目標)。
例如,將線的向量設置為子彈lastPosition
到每個更新周期的子彈currentPosition
,測試該線段每個更新沿其路徑的碰撞次數。
以Matthew Pigram的答案為基礎:
除了繪制Lizzaran92所示的線並測試交點外,您還需要計算該幀內交點的“ 時間 ”,以避免錯誤的碰撞。
例如,假設兩條線都以線性速度行進,則如果線A相交於其線的50%,而線B相交於20%,那么它們很可能從未發生碰撞。 您可以設置一個閾值 ,彼此之間的偏差應在10%以內,以表示碰撞。
其他答案都指向正確的方向。 您可以使用直線相交方法。 在大多數情況下,這是令人發笑的,因為這種“錯誤碰撞”和實際碰撞之間的差異很小。 但是,如果您看到這似乎並不現實,那將是現實。 您可以使用交點。
您有2個對象,分別是速度,兩者的起點和終點。 有了這些信息,您可以:
如果差異較小,則您的容忍度發生了碰撞。
請注意,這可能會降低性能,因此僅在確實必要時才使用它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.