2012-03-29 123 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。