2011-09-13 16 views
2

サンプルとチュートリアルを探していましたが、具体的なものは見つかりませんでした。長方形とパス線の衝突を計算する

私は2D XNA C#ゲームを作っています。プレイヤーが1つ以上のパスラインに到達したときにそのプレイヤーの最終的な位置を検出したいので、クロスされません。

プレーヤーは衝突矩形で作成され、パス線はすべてセグメントです。だから、基本的に私は、プレーヤーの衝突矩形と次のプレーヤーの位置衝突矩形を持っています。次のプレイヤーの位置がパスラインに衝突した場合、プレイヤーが受ける可能性のある最大変位を求めたい。

画像は私がやりたい多かれ少なかれ何を示しています。

Picture

私は赤い四角形の位置を見つけたいです。

アルゴリズム、ソリューション、または私に役立つリンクをお持ちの人はいますか?サンプルでもあります。

+0

サークルではない四角形を使用する特別な理由はありますか? –

+0

@piotr Auguscik精度問題である可能性があります。 – MGZero

+0

円で尋ねると、そのようなタスクは簡単です:) –

答えて

0

特定の衝突ボックスに衝突があるかどうかを確認する手段があると仮定すると、プレイヤーの現在の位置と衝突ボックスの間で並べ替えを行うことをおすすめします。以前の既知の非衝突ボックス。この新しい衝突ボックスで再度テストします。衝突でない場合は、この点と既知の衝突ボックスの中間点を選択します。そうでない場合は、後方に半分の点を選択します。あなたが満足している精度のレベルで(例えば、1から2ピクセルのオーダで)衝突していないボックスが見つかるまで、繰り返します。ほんの一握りのテストで、あなたはそのような点を見つけることができるはずです。

+0

お返事ありがとうございます。ちなみに、この方法は十分速く動作すると思いますか?あなたはこれを行うより速い方法を知っていますか? –

+0

あなたは大歓迎です。私はパフォーマンスについても考えていましたが、これは特に速い方法ではありませんが、衝突がすでに発生する直前にアクティブにするべきです。ゲームの性質によっては、プレーヤーのスピードがそれほど速くない限り、あなたはおそらくやっていることを考慮すると、少数である満足のいくポジションを得るために5回程度のテストをする必要はありませんいずれの場合もすべてのフレームで衝突チェックを行います。それ以外の場合は、最適化のベースとして使用できる参照実装になる可能性があります。 –

+0

より速い選択肢として、私はあなたのゲームのメカニックと衝突チェックの実装に本当に依存すると思います。おそらく、衝突検査をもう少しスマートに行うことで、衝突の場所に関する情報を得ることができます。たとえば、衝突が発生すると、小さい方の長方形で再テストして、衝突の位置を確認できます。この情報は、あなたがプレイヤーをどれだけ戻す必要があるかを迅速に判断する方法を提供するかもしれませんが、このメカニズムはいくつかの前提に基づいています。 –

関連する問題