2

XNAを使い始めたばかりで、この例は大いに役立ちます。

いくつかの地形とボールを取得し、ボールが地形に当たると停止するという簡単なテストを行いました。これは、衝突時にボールの位置を地形の真上に設定することで行います。

私の質問では、これにバウンディングボックスを使用していますが、ボールが上にリスポーンするため、ボールが左側または右側から地形に当たると見栄えがよくありません。側面に当たっていることを確認するにはどうすればよいですか?

現在のコードの短い不具合:

if (playerOne.BoundingBox.Intersects(terrain.BoundingBox)

   playerOne.Position.Y = terrain.BoundingBox.Top;

playerOneはボールです。

前もって感謝します!

4

2 に答える 2

1

このチュートリアルを強くお勧めします。バットをさまざまな領域に分割し、数学ヘルパーとラジアンを使用して衝突リバウンドのさまざまな条件を設定することで、正確な状況をカバーします。

http://ross-warren.co.uk/pong-clone-in-xna-4-0-for-windows/6/ 

それは側面ですが、原則を適応させることができるはずです。

于 2011-09-15T04:24:13.943 に答える
1

XNA BoundingBoxが、どちらの側が衝突したかを判断するのに役立つ組み込みの方法はありません。バウンディングボックスを6つのボックス(部屋の周りの壁のように、現在のボックスの各面に1つずつ)に分割している人もいますが、これでも、重なり合っている可能性のあるコーナーの近くで少し問題が発生し、どのボックスを解決する必要があると思いますか?最初にヒットします。

究極の解決策は、現在のバウンディングボックスの各面に平面を作成し、バウンディングボックスが衝突を検出した場合は、各平面との衝突をチェックすることです。衝突すると、一度に1、2、または3つの飛行機に衝突する可能性があります。1を超える場合は、関係する各平面のポイント/平面の接触位置を決定する必要があります。ボールの前の位置に近い方、つまり最初にボールが当たった側です。

于 2011-09-15T08:56:11.007 に答える