2012-03-29 13 views
3

クリーンなコリジョン検出コーディングをどのように書くことができるかについて、素敵なリソースの資料がどこにあるのだろうかと思っていました。XNA 2Dコリジョン検出

私はXNAプログラミングには新しく、ゲームの書き方について一般的な理解を持っていますが、私は衝突検出のアイデアに深刻な問題を抱えています。それは私の心を揺さぶる。

2d boundingboxクラスを使用することができます。しかしその後、私は立ち往生しています。私は、オブジェクトがゲーム内のすべての単一のオブジェクトと衝突しているかどうかをチェックする必要はないので、誰かが問題に関する何かの文学について正しい方向に向けることができるかどうか疑問に思っていました。

答えて

0

これはゲームの規模と実装に大きく依存します。オブジェクトはどのように整理されていますか?ゲームはマップ化されていますか、または1つの画面しかありませんか?どのオブジェクトが他のオブジェクトと衝突するか?

ゲームのスケールが十分小さい場合は、ゲームをまったく心配する必要はありません。

ない場合は、考慮してください。

  • 分割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>>(); 
    
  • が、より挑戦的な実装、あなたオブジェクトが「セクタ」で整理されている空間分割を使用できます。これにより、離れたオブジェクトを即座に排除できます。

0

CPUの検出作業を最小限に抑えるだけの場合は、QuadTreeの実装を参照してください。あなたは、実際の物理学についての詳細を話している場合はN-ゲームの開発者からのチュートリアルをチェックアウトし、 http://www.codeproject.com/Articles/30535/A-Simple-QuadTree-Implementation-in-C

http://www.metanetsoftware.com/technique.html

彼らは基本的に検出(C#での例)を最適化するために、小さなセクションにあなたの「シーン」を破ります

または、FarseerやBulletなどの既存のXNA物理エンジンを使用してください。