更精确的基于平铺的碰撞

时间:2011-05-15 04:04:15

标签: xna 2d collision-detection geometry

首先,玩家将控制一个圆形物体。 我试图在基于磁贴的游戏中进行碰撞。我的一个问题是并非所有的瓷砖都是方形的。它们都是各种不规则的形状。我想要处理这个问题的方法是做两次检查; 1)检查玩家是否在可击中牌的范围内 2)检查(不知何故)他们是否真的与瓷砖接触

我该怎么做?或者,还有更好的方法? 我正在使用C#/ XNA(可能并不重要)

4 个答案:

答案 0 :(得分:1)

您可以首先检查rectangular collision以及per-pixel collision是否存在冲突检查。

这两个链接非常棒,非常适合使用XNA进行基本的碰撞检测。

答案 1 :(得分:1)

有几种方法可以解决这个问题。就个人而言,我会跟踪列表中的所有可碰撞对象。如果有很多对象(多说200),你可以保留几个列表。每个列表代表屏幕的四分之一或八分之一。在每次更新时,您都可以浏览列表并检查碰撞的对象(Tiles重叠)。如果图块重叠,那么您将检查Pixel Perfect Collisions

答案 2 :(得分:0)

我建议使用物理引擎。您可以在他们的网站上或通过谷歌搜索找到每个教程和文档。这些是一些XNA物理引擎:

  1. Farseer Physics
  2. JigLibX
  3. PhisiXNA(我刚在谷歌搜索中发现这个并不能保证,但其他两个在XNA社区中使用得很好)

答案 3 :(得分:0)

我打算为我的下一个项目创建以下解决方案:

  1. 我游戏中的每个 GameObject 都会有一个CollisionRectangle字段。
  2. 创建一个由多个矩形组成的 CompositeRectangle 对象。这样做的好处是(至少在我的情况下)它可以在构建时使用一些Content Pipeline处理器创建,免费获取我的CollisionRectangle,并通过调用.Collides(...)