2014-06-22 179 views
0

我正在使用Corona SDK檢測碰撞。我沒有問題,檢測碰撞是否是廣場的左邊或右邊使用下面的代碼:檢測正方形的哪一側與碰撞檢測碰撞

if (event.other.x < displayObj.x) 

碰撞代碼:

function box:collision(event) 
    if event.phase == "ended" then 
    if event.other.id and event.other.id == "c" then 
     --need to detect top collision 
     test = 1 
    end 

如何檢測是否頂部廣場與某事相撞?

+0

向我們展示你的'function onCollision(event)'的實現。現在我不明白爲什麼你不能使用'.y'。 – Ilya

+0

把它放在你的問題! – Ilya

回答

1

你可以使用線性代數!矢量和點積對於弄清楚你想要的東西非常有用。你可以找到更多深入的信息,如果您谷歌:Half-space test dot product

假設你有一個名爲A和碰撞點B框,位置(A.x,A.y)(B.x,B.y)(A.dirX, A.dirY)確定盒的前進方向,你可以判斷B點是在前面或後面盒A的方向是這樣的:

  1. 獲得從位置A載體以B和正常化它:

    vectorToBNormalized = normalize((B.x,B.y)-(A.x,A.y))

  2. 使用vectorToBNormalizedA的前向量的點積來確定B是否在後面。

    result = dot(vectorToBNormalized, normalize(A.dirX, A.dirY))

如果結果小於0則:B是A的後面;如果結果大於0,則:B在A的前面。

要確定框B是框A的左邊還是右邊,重複該過程,但是使用右向量而不是例如,如果up由(0, 1)定義,則右側將是(1, 0)

通過這種方式,您可以確定碰撞點是在後面/面前還是左/右。