我需要通过弧实现2D碰撞检测。我有玩家(黑点)和敌人(红点)。玩家可以向任何方向攻击,其命中区域为120度(绿线表示)和一定半径(黑色曲线)。
如何实现这种检测?
我已经完成了在玩家和敌人之间计算角度的代码,但是我无法理解如何使用玩家的方向向量来检查它是否在弧内。
答案 0 :(得分:2)
计算敌人的角度和他们的距离。用它来检查它们是否在范围内。
问题很简单,如果你使用笛卡尔坐标的方形区域,那么通过转换为径向坐标,这个问题也变得简单了。
使用新信息
检查矢量B的长度不会太长。
然后矢量之间的角度由下式给出:acos(| A.B | / | A || B |)
如果角度小于60度(120的一半),那么敌人就在范围内。
答案 1 :(得分:1)
首先,玩家必须有方向,例如2D矢量。简单来说,它与第一条绿线的角度=它与另一条绿线的角度。
您应该执行两项检查:
这应该足够作为一个想法,希望这有用。
答案 2 :(得分:1)
假设您有单位长度向量指向“向前”。而且假设你有单位长度向量指向潜在目标。如果目标在ark内,那么;
dot(forwardVector, targetVector) >= cosf(arcAngle/2)
。
如果向量不是单位长度,当然不会起作用。检查目标是否在要求的角度内。
检查它是否在要求的距离内是微不足道的,并且几乎是squaredLength(targetPosition - playerPosition) <= arkDistance*arkDistance
,其中squaredLength是dot(vector, vector)
。