2016-12-26 8 views
0

私はlibgdxを勉強していて、実際に私のレイキャスティングを混乱させるものの1つです。私はそれを使う方法のチュートリアルを読んで理解していますが、本当に背中のものを知りたいのです。私はこのメソッドのソースコードを探しました。レイキャストの仕組みを教えてもらえますか?

public void rayCast (final RayCastCallback callback, float point1X, float point1Y, float point2X, float point2Y) { // FIXME pool RayCastCallback? 
    world.raycast(new org.jbox2d.callbacks.RayCastCallback() { 
    @Override 
    public float reportFixture (org.jbox2d.dynamics.Fixture f, Vec2 p, Vec2 n, float fraction) { 
     return callback.reportRayFixture(fixtures.get(f), point.set(p.x, p.y), normal.set(n.x, n.y), fraction); 
    } 
}, this.point1.set(point1X, point1Y), this.point2.set(point2X, point2Y)); 

} どのように我々は、この方法は、自分自身を再帰的に呼び出し、コールバック変数のreportRayFixtureへの呼び出しを返す見ることができます。私が実際に混乱させたのは、コードがFixtureを選択する場所と、そのフィクスチャがどのようにチェックするかです。誰かが本当にその仕組みを私に説明することができますか?

このソースコード・ページhttps://github.com/libgdx/libgdx/blob/master/extensions/gdx-box2d/gdx-box2d-gwt/src/com/badlogic/gdx/physics/box2d/gwt/emu/com/badlogic/gdx/physics/box2d/World.java

私はそれを感謝します!

+0

gwtを使用していない限り、間違ったコードが表示されています。あなたが参照しているコードはgwtバックエンド用です。これはjbox2dを使用する特殊なケースです。他のすべてのバックエンドは通常の(ネイティブ)box2dライブラリを使用します。 – Xoppa

答えて

0

Raycastingは、スペースを通って目に見えない線を引いて、それが何を交差するかを見るときです。一般的な使い方は、プレーヤーが何をクリックしているかを把握することです。プレーヤーがクリックしている方向にカメラから線を引いていきます。最初のオブジェクトはプレーヤーがクリックした線です。

Box2Dでは、RayCastCallbackインターフェイスを使用して、レイがフィクスチャにヒットしたときに実行されるコードを書くことができます(たとえば、特定のフィクスチャを無視することができます)。私はこれを個人的に使用していませんが、壁の貫通兵器が壁の後ろにあるオブジェクト(またはそのようなもの)に当たるかどうかを確認するために、シューティングゲームでこのようなものを使用できると思います。ハイレベルでは、どのようなコードのこの素敵作品がやっていることはあなたが本当に密接にそれを見れば、どのようなことはやっていることはlibGDX RayCastCallbackに取って、それをラップしている手の少しわずか

ですJBox2Dわずかに異なるAPIを持つRayCastCallback。それは再帰的に呼び出すよりも、メソッドのオーバーロードに似ています。

何かdo notは、著者がPoint1とPoint2のインスタンス変数を作成する理由を知っている理由です。私はあなたが複数の備品を持っていたらオーバーライドすると思いますので、おそらく彼らはレイにヒットした最後のフィクスチャを含むはずですか?それでも、複数のレイキャストがそれらを上書きするように見えます。

関連する問題