2013-05-09 126 views
10

一般檢測帆布遊戲碰撞我使用類似:如何檢測快速移動之間的碰撞物體

function collides(a, b) { 
    return a.x < b.x + b.width && 
    a.x + a.width > b.x && 
    a.y < b.y + b.height && 
    a.y + a.height > b.y; 
} 

但這僅檢測碰撞如果對象是在幀進行處理的時間接觸。如果我有一個精靈,其速度(以像素/幀爲單位)大於其路徑中障礙物的寬度,它將通過障礙物而不會檢測到碰撞。

我該如何去檢查精靈和目的地之間的內容?

+1

在每一幀上,檢查一個向量與你的精靈速度的長度是否與對象相交。 – 2013-05-09 12:59:18

+2

您可能想考慮在[GameDev.SE]上詢問這個問題。 – zzzzBov 2013-05-09 15:57:15

+0

也相關:http://stackoverflow.com/questions/7364884/problem-with-collision-detection-of-a-fast-moving-ball-with-a-racket-controlled – JayC 2013-05-09 18:50:45

回答

2

這通常是一個難題,對於像Box 2D庫這樣的高質量解決方案來說,這將是有用的。

一個快速和骯髒的解決方案(對對角線移動的物體給出誤報) - 檢查覆蓋物體在當前和以前的框架中的位置的邊界框之間的碰撞。

代替a.x使用min(a.x, a.x - a.velocity_x),而不是使用a.x + a.widthmax(a.x + a.width, a.x + a.width - a.velocity_x)

如果正在快速移動的對象是小的(子彈),然後線之間碰撞測試(從原點到原點+速度)和其他物體的盒子。

0

您應該使用移動物體掃描(在更新間隔中)的整個區域作爲邊界框來檢查障礙物。