2012-03-29 112 views
3

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

我对XNA编程非常陌生,并且对如何编写我的游戏有了一般的理解,但是我对碰撞检测的想法有着严重的困扰。它令我难以置信。

我知道你可以使用2d boundingbox类。但之后,我被卡住了。我不想检查一个物体是否与游戏中的每一个单一物体发生碰撞,所以我想知道是否有人能够指出我在这个问题上的某些文献的正确方向。

回答

0

这取决于游戏的规模和实施。对象是如何组织的?游戏是否组织成地图,还是只有一个屏幕?哪些对象将与其他对象碰撞?

如果游戏规模足够小,您可能根本无需担心。

如果没有,可以考虑:

  • 分裂比赛进入不同的地图,其中一张地图上的对象将与其他对象相同的地图

  • 按类型组织的敌人名单上唯一的碰撞,这样你就可以只检查正确的对象类型。 (即:射弹不检查射弹等)。例如,我用下面的字典,这样我可以核对属于某一派某一类型的对象,或唯一的生物:

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

0

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

如果你谈论更多实际的物理,从N个的游戏的开发者检查出的教程: http://www.metanetsoftware.com/technique.html

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