C# 矩形重叠而不是触摸XNA 4.0时出现问题

C# 矩形重叠而不是触摸XNA 4.0时出现问题,c#,xna,2d,collision-detection,C#,Xna,2d,Collision Detection,我正在为XNA中典型的泡泡枪游戏制作骨架,我的碰撞检测算法有问题,如图所示 根据碰撞时碰撞矩形位置的位置,将为碰撞气泡指定一个新位置 当我拍摄一个泡泡时,这个问题就会出现,发生在碰撞的瞬间。 我已经一步一步地运行调试,碰撞发生的时刻与图片完全相同,因此我的算法失败。 我试图直接发布这些图片,但似乎不行,因为我还是这里的新用户。很抱歉 当矩形的边界相互接触时,是否有一种方法可以准确地检测到,您可以执行逐像素碰撞,如下所述: 那么,如果我理解的话,你的问题是你错过了碰撞的确切时刻 我猜你是在以一种谨

我正在为XNA中典型的泡泡枪游戏制作骨架,我的碰撞检测算法有问题,如图所示

根据碰撞时碰撞矩形位置的位置,将为碰撞气泡指定一个新位置

当我拍摄一个泡泡时,这个问题就会出现,发生在碰撞的瞬间。 我已经一步一步地运行调试,碰撞发生的时刻与图片完全相同,因此我的算法失败。
我试图直接发布这些图片,但似乎不行,因为我还是这里的新用户。很抱歉


当矩形的边界相互接触时,是否有一种方法可以准确地检测到

您可以执行逐像素碰撞,如下所述:


那么,如果我理解的话,你的问题是你错过了碰撞的确切时刻

我猜你是在以一种谨慎的方式计算碰撞,也就是说,即使你的算法每秒运行60次,当一秒钟可以细分为无限多个瞬间时,也只有60次

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

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

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

有关GameTime类的MSDN文档:

维基百科上关于碰撞检测的一些阅读材料:


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

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

                if(hitBottomPart)
                {
                  // Logic
                }
在投射物有时间撞击纹理的另一个矩形之前,零件将在此同一帧中执行。 虽然这只是一个猜测。
祝你的比赛好运!碰撞总是很难实现。

是的,我已经试过了。把时间搞乱了,这样我就可以分析离散碰撞,而不是连续碰撞。我还认为这是一个非常肮脏的实现,我将把它作为最后的资源。我想,我会尝试每像素碰撞。谢谢我想这就是我需要的。非常感谢。这正是我所需要的。你应该得到一枚奖章。再次感谢。是的,我也考虑过这个问题。我会考虑你的建议。谢谢没问题。我在一个砖块破坏者类型的游戏中看到了同样的问题,球有时间在一秒钟内击中许多砖块,因为碰撞没有限制。这个解决方案做到了这一点,而且比将整个碰撞系统更改为每像素一个像素更容易实现。(尽管每像素的像素更精确)