检测移动物体和不动物体之间的碰撞

时间:2010-07-07 14:01:49

标签: c# xna collision-detection

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

我目前正在尝试制作Pong克隆,但我遇到了碰撞检测问题。

每个对象基本上都有一个特定的速度(Vector2),Position(Vector2,也是)和Speed(只是一个浮点数)。在对象的每次Update()调用中,位置都以这种方式改变:

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

首先,我只检查两个对象之间是否存在碰撞,并且从对象的矩形进行简单的Intersects()调用。我很快意识到,我不仅可以检查对象是否当前与另一个对象发生碰撞,而是检查对象是否与对象碰撞。只检查两个物体当前是否发生碰撞,当速度过高时,球会通过桨叶。

我尝试了不同的方法来解决这个问题,但是它们似乎都没有用。我只需要一种方法来检查两个物体是否在路上碰撞,如果它们是,它们是从水平,垂直还是两者(相应地改变球的速度)。

我不一定非常想要解决方案,也许只是如何实现它的基本思路,我将自己编写代码。

感谢您的时间。

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

作为一个起点,请看一下。

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

这是关于所有不同碰撞方式的非常好的介绍。也许你的情况在这里解释了。

答案 2 :(得分:2)

我认为这个链接:http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php可能就是你要找的东西。它描述了球面扫描测试,对于快速移动的物体可以在一帧间隔内穿过一个平面时非常有用。

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

答案 3 :(得分:2)

你遇到的问题是,如果一个对象太快,它可以通过检测调用Update()之前传递不动对象(就像它通过不动对象一样)。

沿着移动向量以速度大小扩展对象的形状: 具有速度[0,0][2,2]和速度[1,0]的方形10将创建矩形[0,0][12,2] =>的形状它现在位于[0,0]的坐标[12,2]

现在将矩形与不动对象相交。现在你知道他们是否相撞了。

答案 4 :(得分:-1)

如果两个点对象具有相同的位置,则它们会发生碰撞。