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

时间:2014-06-22 10:49:44

标签: lua corona collision-detection

我正在使用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

如何检测方块的顶部是否与某些东西相撞?

1 个答案:

答案 0 :(得分: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))

  3.   

    如果结果小于0,那么:B落后于A;如果结果大于0,则:B位于A前面。

    要确定框B是否在框A的左侧或右侧,请重复此过程,但使用右侧向量而不是框A的前向向量。例如,如果向上由(0, 1)定义,然后右边是(1, 0)

    通过这种方式,您可以确定碰撞点是在后方/前方,还是在左侧/右侧。