C#数学,碰撞检测,xna

时间:2012-11-15 13:25:36

标签: c# math xna collision-detection

我在游戏中进行碰撞检测。 所有表面都是正交的,所以我只需要确定我的移动物体碰撞的障碍物的哪个面。 我有一个矩形定义了两个物体的交点,矢量代表了移动物体的速度和运动方向。

我估计我需要沿着我的移动物体矢量转换交叉矩形,直到交点变成一条线,然后我就会知道哪个面与第一个相撞。

然而,我不知道如何以编程方式进行数学处理 enter image description here

enter image description here

3 个答案:

答案 0 :(得分:3)

计算从(物体内部障碍物的角落)到(障碍物内部物体的角落)的矢量。无论运动矢量处于何处,此向量的“侧面”都会给出首先触及的“侧面”。如果它们具有相同的角度,则首先碰到角落。

E.g。这里你的运动矢量大约是260度,然后计算出的矢量大约是240度。从计算到运动的逆时针是20度,顺时针是340度。因此,逆时针侧(底部)首先相撞。

你需要知道哪两个方面有问题,哪个是“顺时针”和“逆时针” - 我希望这是微不足道的。

答案 1 :(得分:2)

您可以将速度矢量的aspect ratio与交叉矩形的纵横比进行比较。

对于这个特殊的例子,如果速度矢量比交叉矩形更陡(即定义一个更高更瘦的矩形),那么碰撞就在底面。

如果速度矢量较浅,则碰撞位于移动矩形的左侧。

如果速度矢量与交叉矩形具有相同的纵横比(即速度位于交叉矩形的对角线上),则它们会在角落处碰撞。

答案 2 :(得分:2)

其实我可能已经弄清楚了......

  • 在交叉矩形上找到不在对象上的点 矩形

  • 从矢量方向那里画一条线

  • 与它相交的任何一方是碰撞第一个
  • 的一侧