2011-02-02 14 views
0

64 x 64ピクセルのタイル(10行、10列)のタイルマップがあります。移動するユニットと壁やオブジェクトの衝突を検出したいと思います。どのようにしてユニットをタイルマップの中央に置いて、移動しながらユニットがすぐに位置を更新せずに方向を変えてタイルの中心から捨てるのかを検出できますか?XNAタイルベースの衝突

例:TilePositionX = 3、TilePosition = 0にオブジェクトがある場合、そのオブジェクトはユニットの方向を変更しますが、常に中央に配置します。ユニットがXVelocity = 1.0f(これは任意のベロシティである可能性があります)でオブジェクトに向かって右に向かっている場合は、すべてのアップデートを行います。ユニットの中心位置を検出してオフセットを追加し、完全にタイルの内側にいるかどうかを確認する必要がありますか?私は私の問題の良い解決策ではありません。

+0

まだこのstackoverflowリンクを見ましたか?私はこれが少し質問されている、おそらく閉じなければならないと信じています。 http://stackoverflow.com/questions/2316133/tile-based-collision-in-xna – jluzwick

答えて

0

私が似たような状況で行ったのは、移動していたタイルの中心であったユニットのターゲットの送り先(ピクセル単位)でした。その後、すべての更新によってユニットがそのターゲットに近づきました。ユニットがタイルの中央に来たときにのみ、新しい目的地を確認しました。

例:単位Aはピクセル(32,32)(そのタイルの中心)の座標(0,0)にあります。 Aはタイル(0,1)に移動するので、 96)。ユニットが更新されるたびに、ユニットは(0,1)ピクセル下に移動します。ユニットがタイル(0,1)の中心である(32,96)になると、次にそれが次に移動する場所を決定できます。

0

私がゲームのいくつかでこれを処理したのは、タイルとピクセルオフセットを保持していたため、タイルは常にソリッドナンバーのままです。I.E 1,2ピクセルオフセットは方向に基づいてマイナスのプラスになりました。それがタイルのサイズを上回ると、それをゼロにリセットし、腐食性タイルタイプに加減算します。そこから移動することができないタイルを打っているかどうかを判断するのがかなり簡単になります。