我正在使用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 :(得分:1)
你可以使用线性代数!向量和点积对于弄清楚你想要什么非常有用。如果你谷歌,你可以找到更多深入的信息:Half-space test dot product
假设您有一个名为A
和碰撞点B
的方框,位置为(A.x,A.y)
和(B.x,B.y)
,方框的正向由(A.dirX, A.dirY)
确定您可以确定B点是否在方框A的前面或后面,如下所示:
从位置A到B获取一个向量并对其进行标准化:
vectorToBNormalized = normalize((B.x,B.y)-(A.x,A.y))
使用vectorToBNormalized
和A
前向矢量的点积来确定B是否位于后方。
result = dot(vectorToBNormalized, normalize(A.dirX, A.dirY))
如果结果小于0,那么:B落后于A;如果结果大于0,则:B位于A前面。
要确定框B是否在框A的左侧或右侧,请重复此过程,但使用右侧向量而不是框A的前向向量。例如,如果向上由(0, 1)
定义,然后右边是(1, 0)
。
通过这种方式,您可以确定碰撞点是在后方/前方,还是在左侧/右侧。