XNA 2D碰撞检测
本文关键字:碰撞检测 2D XNA | 更新日期: 2023-09-27 18:29:15
我想知道在哪里可以找到一些关于如何编写干净的碰撞检测编码的好的资源材料。
我对XNA编程还很陌生,对我想如何编写游戏有一个大致的了解,但我在碰撞检测的想法上遇到了严重的问题。这让我难以置信。
我知道你可以使用2d边界框类。但在那之后,我陷入了困境。我不想检查一个物体是否与游戏中的每一个物体都发生了碰撞,所以我想知道是否有人能为我提供一些关于这件事的文献或其他什么。
这在很大程度上取决于游戏的规模和实现。对象是如何组织的?游戏是按地图组织的,还是只有一个屏幕?哪些对象将与其他对象碰撞?
如果游戏规模足够小,你可能根本不需要担心。
如果没有,请考虑:
-
将游戏分成不同的地图,其中一张地图上的物体只会与同一地图上的其他物体发生碰撞
-
按类型组织敌人列表,这样你就可以只检查正确类型的对象。例如,我使用以下字典,这样我就可以只检查某一类型的物体,或者只检查属于某一派别的生物:
private readonly Dictionary<Type, List<MapObject>> mTypeObjects = new Dictionary<Type, List<MapObject>>(); private readonly Dictionary<FACTION, List<MapObject>> mFactionCreatures = new Dictionary<FACTION, List<MapObject>>();
-
为了最大限度地提高效率,但这是一个更具挑战性的实现,您可以使用空间分区,其中对象按"扇区"组织,允许您立即排除远处的对象。
如果您只是想尽量减少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。