Xna 更精确的基于平铺的碰撞

Xna 更精确的基于平铺的碰撞,xna,2d,collision-detection,geometry,Xna,2d,Collision Detection,Geometry,首先,玩家将控制一个圆形物体。 我试图在一个基于瓷砖的游戏中进行碰撞。我的问题之一是不是所有的瓷砖都是方形的。它们是各种不规则的形状。我当时的处理方法是做两次检查; 1) 检查玩家是否在可命中磁贴的范围内 2) 检查(不知怎么的)他们是否真的接触到了瓷砖 我该怎么做?还是有更好的办法? 我使用的是C#/XNA(可能不重要)我建议使用物理引擎。你可以在他们的网站上或通过谷歌搜索找到每一个的教程和文档。以下是一些XNA物理引擎: (我刚刚在谷歌搜索中发现了这一点,但无法保证,但另外两个在XNA社

首先,玩家将控制一个圆形物体。 我试图在一个基于瓷砖的游戏中进行碰撞。我的问题之一是不是所有的瓷砖都是方形的。它们是各种不规则的形状。我当时的处理方法是做两次检查; 1) 检查玩家是否在可命中磁贴的范围内 2) 检查(不知怎么的)他们是否真的接触到了瓷砖

我该怎么做?还是有更好的办法?
我使用的是C#/XNA(可能不重要)

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

  • (我刚刚在谷歌搜索中发现了这一点,但无法保证,但另外两个在XNA社区中使用得非常好)
  • 您可以先检查是否存在碰撞,然后检查是否存在碰撞


    这两个链接非常棒,非常好地介绍了XNA的基本碰撞检测。

    有几种方法可以解决这个问题。就我个人而言,我会跟踪列表中所有可碰撞的对象。如果有很多对象(比如说200多个),你可以保留几个列表。每个列表将代表屏幕的四分之一或八分之一。每次更新时,您都可以运行列表并检查对象是否发生碰撞(平铺重叠)。如果瓷砖重叠,则您将检查。

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

  • 我游戏中的每个游戏对象都有一个CollisionRectangle字段
  • 创建将由多个矩形组成的CompositeRectangle对象。这样做的好处是(至少在我的情况下)可以在构建时使用一些内容管道处理器创建它,免费获取我的CollisionRectangle,并像往常一样通过调用.Collides(…)检查它