0

我正在为 XNA 中的典型 BubbleShooter 游戏制作骨架,但我的碰撞检测算法存在问题,此处的图片对此进行了说明

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

当我射出一个气泡时会出现问题,发生在碰撞的那一刻。我一步步运行调试,碰撞发生的那一刻和图片一模一样,所以我的算法失败了。
我试图直接发布图像,但似乎我不能,因为我仍然是这里的新用户。对于那个很抱歉。

有没有办法可以准确检测矩形 的边界何时相互接触?

4

3 回答 3

1

您可以改为执行每像素碰撞,此处说明:

点击这里

于 2012-04-04T16:32:14.897 回答
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

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

于 2012-04-04T16:43:40.040 回答
0

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

                if(hitBottomPart)
                {
                  // Logic
                }

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

于 2012-04-04T16:56:26.467 回答