首先,我的问题并不是特定于C#或XNA,但我的代码示例将使用这些。
我目前正在尝试制作Pong克隆,但我遇到了碰撞检测问题。
每个对象基本上都有一个特定的速度(Vector2),Position(Vector2,也是)和Speed(只是一个浮点数)。在对象的每次Update()调用中,位置都以这种方式改变:
Velocity.Normalize();
Position += Velocity * Speed;
首先,我只检查两个对象之间是否存在碰撞,并且从对象的矩形进行简单的Intersects()调用。我很快意识到,我不仅可以检查对象是否当前与另一个对象发生碰撞,而是检查对象是否与对象碰撞。只检查两个物体当前是否发生碰撞,当速度过高时,球会通过桨叶。
我尝试了不同的方法来解决这个问题,但是它们似乎都没有用。我只需要一种方法来检查两个物体是否在路上碰撞,如果它们是,它们是从水平,垂直还是两者(相应地改变球的速度)。
我不一定非常想要解决方案,也许只是如何实现它的基本思路,我将自己编写代码。
感谢您的时间。
答案 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)
如果两个点对象具有相同的位置,则它们会发生碰撞。