代码之家  ›  专栏  ›  技术社区  ›  Jesse Emond

检测运动物体和静止物体之间的碰撞

  •  6
  • Jesse Emond  · 技术社区  · 14 年前

    首先,我的问题并不是针对C#或XNA,但我的代码示例将使用这些问题。

    每个物体基本上都有一个特定的速度(即矢量2)、位置(也有矢量2)和速度(只是一个浮点数)。每次调用对象的Update()时,位置都会按以下方式更改:

    Velocity.Normalize();
    Position += Velocity * Speed;
    

    首先,我只通过从两个对象的矩形调用Intersects()来检查当前是否有两个对象之间的冲突。我很快意识到我不能只检查物体是否 与另一个物体相撞 碰撞 一个物体在路上。只有检查两个物体是否正在碰撞,才能使球在速度太高时穿过桨。

    我不一定马上就想要解决方案,也许只是如何实现这一点的基本想法,我会自己编写代码。

    谢谢你的时间。

    5 回复  |  直到 7 年前
        2
  •  3
  •   Trefex    14 年前

    作为起点,请看这里。

    http://www.flipcode.com/archives/Theory_Practice-Issue_01_Collision_Detection.shtml

    这是一个非常好的介绍所有不同的碰撞方式。也许你的案子在这里有解释。

        3
  •  2
  •   awshepard    14 年前

    我认为这个链接: http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php 可能就是你要找的。它描述了球体-平面扫描测试,适用于在一帧间隔内有可能通过平面的快速移动对象的情况。

    它还提供了交点,可以用来反映关于平面法线的轨迹并继续对象的路径。

        4
  •  2
  •   Jaroslav Jandek    14 年前

    如果一个物体速度太快,它会在一个物体之前通过不动的物体 Update() 与检测一起调用(就像它通过固定对象一样)。

    使用“速度”的大小沿移动向量扩展对象的形状: 方块字 [0,0][2,2] [1,0] 和速度 10 将创建一个矩形的形状 [0,0][12,2] =>它现在被定位在坐标上 [0,0] 有尺寸的 [12,2] .

    现在将矩形与静止物体相交。现在你知道他们是否相撞了。

        5
  •  -1
  •   mcandre    14 年前