C# XNA二维碰撞检测

C# XNA二维碰撞检测,c#,xna,collision-detection,physics,C#,Xna,Collision Detection,Physics,我想知道在哪里可以找到一些关于如何编写干净的碰撞检测代码的好的资源材料 我对XNA编程相当陌生,对如何编写我的游戏有着大致的了解,但我在碰撞检测的概念上遇到了严重的问题。这让我很困惑 我知道您可以使用2d boundingbox类。但在那之后,我被卡住了。我不想检查一个物体是否与游戏中的每一个物体都发生碰撞,所以我想知道是否有人能为我指出正确的方向,提供关于这个问题的一些文献或其他东西。如果你只是想尽量减少CPU检测工作,请查看四叉树实现。它们基本上将“场景”分成更小的部分以优化检测(例如C#)

我想知道在哪里可以找到一些关于如何编写干净的碰撞检测代码的好的资源材料

我对XNA编程相当陌生,对如何编写我的游戏有着大致的了解,但我在碰撞检测的概念上遇到了严重的问题。这让我很困惑


我知道您可以使用2d boundingbox类。但在那之后,我被卡住了。我不想检查一个物体是否与游戏中的每一个物体都发生碰撞,所以我想知道是否有人能为我指出正确的方向,提供关于这个问题的一些文献或其他东西。

如果你只是想尽量减少CPU检测工作,请查看四叉树实现。它们基本上将“场景”分成更小的部分以优化检测(例如C#):

如果您正在谈论更多关于实际物理的内容,请查看N-Game开发者的教程:


或者只使用现有的XNA物理引擎,如Farseer或Bullet。

这在很大程度上取决于游戏的规模和实现。对象是如何组织的?游戏是按地图组织的,还是只有一个屏幕?哪些对象将与哪些其他对象发生碰撞

如果游戏规模足够小,你可能根本不需要担心

如果没有,请考虑:

  • 将游戏拆分为不同的地图,其中一个地图上的对象只会与同一地图上的其他对象发生碰撞

  • 按类型组织敌人列表,这样您就可以只检查正确类型的对象。(即:射弹没有对照射弹等进行检查。)。例如,我使用以下词典,以便仅检查特定类型的对象,或仅检查属于特定派别的生物:

    private readonly Dictionary<Type, List<MapObject>> mTypeObjects = 
    new Dictionary<Type, List<MapObject>>();
    
    private readonly Dictionary<FACTION, List<MapObject>> mFactionCreatures =
    new Dictionary<FACTION, List<MapObject>>();
    
    专用只读字典mTypeObjects=
    新字典();
    私有只读词典=
    新字典();
    
  • 为了获得最大的效率,但更具挑战性的实现,您可以使用空间分区,其中对象按“扇区”组织,允许您立即排除远处的对象