【问题标题】:Detecting which side of a square collides with collision detection检测正方形的哪一侧与碰撞检测发生碰撞
【发布时间】:2014-08-12 13:58:42
【问题描述】:

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

如何检测方块顶部是否与某物发生碰撞?

【问题讨论】:

  • 向我们展示您对function onCollision(event) 的实现。现在我不明白你为什么不能使用.y
  • 把它放在你的问题中!

标签: lua coronasdk collision-detection


【解决方案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 的左边还是右边,重复这个过程,但使用一个向右的向量而不是盒子 A 的前向向量。例如,如果 up 是由 (0, 1) 定义的,那么正确的是(1, 0)

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

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多