私は現在XNAの新しいゲームに取り組んでおり、スプライト/アニメーション、入力、ゲームオブジェクトなどのような基本的なものを設定しています。XNAどのように良い衝突アルゴリズムを書くには?
一方、私は良い方法を検出しようとしていますすべてのゲームオブジェクトの衝突を検出することができますが、ゲームを非常に少数のオブジェクトに制限する高速アルゴリズムを考えることはできません。 は、これは私が学校の割り当て
public static void UpdateCollisions()
{
//Empty the list
AllCollisions.Clear();
//Find all intersections between collision rectangles in the game
for (int a = 0; a < AllGameObjectsWithCollision.Count; a++)
{
GameObject obja = AllGameObjectsWithCollision[a];
for (int b = a; b < AllGameObjectsWithCollision.Count; b++)
{
GameObject objb = AllGameObjectsWithCollision[b];
if (obja.Mask != null & objb.Mask!= null && obja != objb && !Exclude(new Collision(obja, objb)))
{
if (obja.Mask.CollisionRectangle.Intersects(objb.Mask.CollisionRectangle))
AllCollisions.Add(new Collision(obja, objb));
}
}
}
}
だった私の最後のプロジェクトでやったことあるので、それはすべてのオブジェクト間のすべての衝突をチェックしますが、除外は、私は不要見つけ衝突を加えます。
その後、私はゲームオブジェクトの量が増加したときにこれが遅くかなり迅速に私のゲームの実行を作っこの
//Look for collisions for this entity and if a collision is found, call the OnCollision method in this entity
var entityCol = FindCollision(entity);
if (entityCol != null)
{
if (entityCol.Other == entity)
entityCol = new Collision(entity, entityCol.Obj1);
entity.OnCollision(entityCol);
}
Collision FindCollision(GameObject obj)
{
Collision collision = AllCollisions.Find(delegate (Collision col) { return (GameObject)col.Obj1 == obj || (GameObject)col.Other == obj; });
return collision;
}
のように呼ばれる仮想メソッドOnCollisionを使用し、彼らは衝突している私のオブジェクトに通知します。
私の頭の中で最初にポップアップするのは、新しいスレッドを作成することです。これはいい考えです。&どうやったらいいですか?
私はアルゴリズムを少し勉強しましたので、私は基本的なコンセプトと、どのように動作するのかを知っています。
私はC#とプログラミング全体でかなり新しいので、説明せずに進んではいけません。私はすぐに学ぶ。
私は衝突を処理し始めると、これを覚えておきましょう。 Upvoted&答えとしてマーク。 –