检测哪一面的方形与碰撞检测发生碰撞

我正在使用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
      --需要检测顶部碰撞
      test = 1
    end

我如何检测正方形的顶部是否与某物相撞?

点赞
用户1078537
用户1078537

你可以使用线性代数!向量和点积在确定你想要的位置上非常有用。如果你搜索谷歌:Half-space test dot product,可以找到更深入的信息。

假设你有一个名为A的盒子和碰撞点B,位置分别为(A.x,A.y)(B.x,B.y),盒子A的前进方向由(A.dirX, A.dirY)确定,你可以这样确定点B是在盒子A的前面还是后面:

  1. 获取从位置A到B的向量并将其归一化:

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

  2. 使用vectorToBNormalized和盒子A的前向量点乘来确定B是在前面还是后面。

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

如果结果小于0:B在A的后面; 如果结果大于0:B在A的前面。

要找出盒子B是否在盒子A的左侧或右侧,请重复该过程,但使用盒子A的面向右的向量,而不是前向量。例如,如果上面定义为(0,1),则右侧为(1,0)

这样就可以确定碰撞点是在后面/前面还是左侧/右侧。

2014-07-23 17:26:31