0

LibGDXには関数Intersectorを含むクラスがありintersectRayBoundsFastます。使い方を知りたいのですが?まず第一に、以下のように私の飛行機をバウンドする方法は?:

ここに画像の説明を入力してください

2番目の質問はこれを適切に動かす方法BoundingBoxですか?setPosition、などのような関数はありませんrotate。そして3つ目はRay、シェルと飛行機の交差点を見つけるための正しいオブジェクトを作成する方法です。

ここに画像の説明を入力してください

お願い助けて。

4

1 に答える 1

0

通常、バウンディング ボックスは粗いテストです。テストを高速化するために、バウンディング ボックスは多くの場合「軸に沿って配置」(略して「AABB」) されます。具体的には、これは、オブジェクトと一緒に回転せず、含まれるオブジェクトの回転に合わせてサイズが変更されることを意味します。(質問に含めた画像は、飛行機のスプライトの AABB の妥当な例です。)

境界ボックスの交差テストは迅速に実行されるため、まったく無関係なすべての要素を排除できますが、ヒットする可能性のある一連の項目が残ります。その後、より正確な交差テストを行うことができます (必要な場合、多くの場合は不要です)。たとえば、基礎となるジオメトリに基づいたり、ピクセルベースの光線交差を使用したりします。libGDX ではピクセルの衝突が複雑であることに注意してください。

あなたの特定のケースでは、飛行機をラインとしてモデル化できると思います。機首から尾翼まで 1 本の線を引くと想像してください。砲弾がその線に当たると、飛行機に命中します。正確なピクセルベースの衝突検出は実際には必要ありません (このアプローチで十分に見えます)。

シェルが垂直に移動していると仮定すると、2 つの線分の交点を計算するだけで済みます: 交点を計算するための効率的な数学アルゴリズム

そうは言っても、おそらくそれほど正確である必要はなく、粗いAABBベースのテストでうまくいくでしょう。たとえば、下の画像では、シェルがまだ実際には平面と交差していませんが、明らかに交差しています。十分に速く動いていると仮定すると、プレイヤーにはわかりません。ゲームをもう少し簡単にしたり、より寛容にしたい場合は、バウンディング ボックスを少し小さくする (おそらくボックスの末尾を少し残す) ことで、少しごまかすことができます。

また、交差を検出するために を使用しないでくださいRay(これは、タッチ ポイントがボックスと交差しているかどうかのテストなどのためです)。シェルには AABB を使用し、長方形のオーバーラップ テストを行う必要があります。

于 2013-01-16T18:00:24.437 に答える