矩形重叠而不是触摸XNA 4.0的麻烦

时间:2012-04-04 16:27:27

标签: c# xna 2d collision-detection

我正在制作XNA中典型的BubbleShooter游戏的骨架,我的碰撞检测算法存在问题,图片here中解释了

根据碰撞时碰撞的矩形位置的位置,将为碰撞的气泡分配一个新位置。

当我拍摄一个气泡并且碰撞时发生this时会出现问题。 我已逐步运行调试,碰撞发生的时刻与图片完全相同,因此我的算法失败了 我试图直接发布图像,但似乎我不能,因为我仍然是这里的新用户。对不起。

当矩形的边界相互接触时,有没有办法可以检测完全

3 个答案:

答案 0 :(得分:1)

您可以执行每像素碰撞,这里将对此进行说明:

Click here

答案 1 :(得分:0)

所以,如果我明白,你的问题是你错过了确切的碰撞时刻?

我猜你是以谨慎的方式计算碰撞,即。即使你的算法每秒运行60次,当瞬间的无穷大时,它只能 60次。

简单(和不好)的解决方案是让你的对象移动得更慢。

好的方法意味着检索帧之间发生的事情。你需要某种方向矢量和物体速度。使用这两个值,您可以确定碰撞发生的位置和时间。

您还需要帧之间经过的时间。这是GameTime对象的目的:它有一个属性“ElpasedGameTime”,它有一个属性“TotalElapsedMilliseconds”。

关于GameTime课程的MSDN文档:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.gametime.elapsedgametime.aspx

维基百科上有关碰撞检测的一些阅读材料:http://en.wikipedia.org/wiki/Collision_detection#A_posteriori_.28discrete.29_versus_a_priori_.28continuous.29

“先验”和“后验”检测:这是您可能缺少的关键词。

答案 2 :(得分:0)

我现在没有时间对其进行测试,但您应该尝试将每帧的碰撞次数限制为1。 如果在检测到一个碰撞时进入更新部件时使用计数器阻止同一帧的所有其他碰撞。 这样,如果你的射弹是它的底部,你的代码是

                if(hitBottomPart)
                {
                  // Logic
                }

部分将在射弹有时间击中纹理的另一个矩形之前在同一帧中执行。 虽然这只是猜测。 祝你的游戏好运!碰撞总是很难实现。