私はここ数ヶ月間、余暇にゲームを開発してきました。私が何度も再実装して100%働いていないという固執点は、衝突の検出です。私のシステム(以下に掲載されています)はほとんどの場合ランダムに動作しますが、プレーヤーはレベルの範囲外にプッシュされているようです。私が出会った問題のチュートリアルは基本的な動作を提供するようです。オブジェクトが問題のオブジェクトに関連していることを知るためには、実際のゲームではこれを実際には知りません。ここに私の実装がありますが、私がここでやっていることを達成するための良いシステムを誰もが知っていれば、私は後になっています。2D矩形衝突検出システム(現実のゲームで動作する)
アイテムは、Rectangleと各アイテムのいくつかの他のビットを公開するIItemのコレクションに由来することに注意してください。
public void Move(float xAdditional, float yAdditional)
{
X += xAdditional;
Y += yAdditional;
foreach (var item in Level.Items)
{
if (item != this)
{
if (item.Boundary.Intersects(this.Boundary))
{
if (item.Boundary.Top > this.Boundary.Top) //we have collided with an object below us.
{
Y = item.Boundary.Top - (this.Boundary.Height/2);
}
if(item.Boundary.Bottom < this.Boundary.Bottom)//we have collided with an object above us.
{
Y = item.Boundary.Bottom + (this.Boundary.Height/2);
}
if(item.Boundary.Left > this.Boundary.Left) //We have collided with an object to the right.
{
X = item.Boundary.Left - (this.Boundary.Width/2);
}
if(item.Boundary.Right < this.Boundary.Right)// We have collided with an object to the left;
{
X = item.Boundary.Right + (this.Boundary.Width/2);
}
}
}
}
}
信頼性の高い衝突応答は、自分自身を正しく得るには本当に難しい問題です。 Box2Dのようなエキスパートによって実装されたソリューションを使用するほうが、いつもより優れています。 – Empyrean
ありがとうEmpyrean、チュートリアルの深刻な読書の後、私は座って、Box2Dに基づいているFarseerを使うことについて学びます。私は物事をどのようにしたいのかに最も適しているようです。それを実際に見たことは、ちょっとしたものではありません。 – Nick