【问题标题】:XNA 2D Collision DetectionXNA 2D 碰撞检测
【发布时间】:2013-10-27 06:12:08
【问题描述】:

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

我是 XNA 编程的新手,并且对如何编写我的游戏有一个大致的了解,但我在碰撞检测的想法上遇到了严重的问题。这让我大吃一惊。

我知道您可以使用 2d 边界框类。但在那之后,我被困住了。我不想检查一个物体是否与游戏中的每一个物体发生碰撞,所以我想知道是否有人可以为我指出正确的方向,以获取有关此事的一些文献或其他东西。

【问题讨论】:

    标签: c# xna collision-detection physics


    【解决方案1】:

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

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

    如果没有,请考虑:

    • 将游戏分成不同的地图,其中一张地图上的物体只会与同一张地图上的其他物体发生碰撞

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

      private readonly Dictionary<Type, List<MapObject>> mTypeObjects = 
      new Dictionary<Type, List<MapObject>>();
      
      private readonly Dictionary<FACTION, List<MapObject>> mFactionCreatures =
      new Dictionary<FACTION, List<MapObject>>();
      
    • 为了实现最高效率,但实现更具挑战性,您可以使用空间分区,其中对象按“扇区”组织,让您可以立即排除远处的对象。

    【讨论】:

      【解决方案2】:

      如果您只是想尽量减少 CPU 检测工作,请查看 QuadTree 实现。他们基本上将您的“场景”分解为更小的部分以优化检测(C# 中的示例): http://www.codeproject.com/Articles/30535/A-Simple-QuadTree-Implementation-in-C

      如果您在谈论更多关于实际物理的内容,请查看 N-Game 开发人员的教程: http://www.metanetsoftware.com/technique.html

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 2015-10-08
        • 2016-08-31
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        相关资源
        最近更新 更多