2017-12-16 15 views
1

私はこの問題に関する回答を見つけようとしましたが、多くの人が好きなようにレイキャスティングを使用しているようには見えません。私は自分のゲームで複数の俳優を抱えています。小さなロボットにソナーセンサーのような短い光線を衝突回避のために投げたいと思っています。Libgdx Box2dレイキャストは複数の光線を投げることができません

私はこれらのアクターのそれぞれを介してループを実行し、インターセプトポイントと法線を保持するために専用Vector2変数を使用してWorldからそれぞれのレイキャスターを呼び出します。 1つのアクターだけがあればうまく動作しますが、レイキャスター関数は1つのインスタンスしか持たず、新しいRaycaster()呼び出しを使用して別のオブジェクトによって呼び出されたとしても、 。したがって、私のリストの最後の俳優だけが実際にそれが投げた光線から情報を受け取ります。

報告されている以前の問題点は、1本の光線だけでしたが、注文をソートしようとしました。ここで

は、俳優の一人内部レイキャスティングコールバックです:

RayCastCallback callback = new RayCastCallback() { 
     @Override 
     public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) 
     { 
      ColP = point; 
      System.out.println("\nColpoint: "+ ColP.x+","+ColP.y+"with "+Type); 
      SurfNormal = normal; 
      dist = 1*fraction; 
      return 1; 
     } 
    }; Parent.world.rayCast(callback,p1,p2); 

あなたたちはどんなこれを実現する方法についてのアドバイス、またはraycasterはので、私はそれを回避する方法を見つけ出すことができどのように機能するかについての洞察を持っている場合以前の呼び出しを書き直してくれてありがとう。

+0

多分別の戻り値を使用する必要がありますか?ソースコードのコメントは次のように言っています: "あなたはフロートを返すことによってレイキャストがどのように進行するかを制御します:-1を返す:このフィクスチャを無視して続行する; 0を返す:レイキャストを終了する;レイをクリップして続けてください(ここに合わせて書式と句読点を編集してください)。 –

+0

これは、これが最初のオブジェクトより多く透過する1つの光線の影響を受けるだけなので、私はそうは思わない。私はキャストした各レイに対して0を返し、ヒットしたところで短い法線ベクトルを描画しますが、実際にキャストした4つのレイのうちの1つのみが実際に何かを返します。 –

答えて

1

わかりました。私は交換を積み重ねるために新しいので、もしコンベンションが私の質問を編集して答えを含んでいたら私に知らせてください。問題は、各オブジェクトに独自のベクトルがあっても、noobエラーが発生し、Javaプリミティブのみが参照で与えられていないことを忘れてしまったということです。解決策は、新しいVector2(点)と新しいVector2(法線)を呼び出して、すべてのベクトルがraycallback関数内で1つにマージされないようにすることでした。

RayCastCallback callback = new RayCastCallback() { 
    @Override 
    public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) 
    { 
     ColP = new Vector2(point); 
     System.out.println("\nColpoint: "+ ColP.x+","+ColP.y+"with "+Type); 
     SurfNormal = new Vector2(normal); 
     dist = 1*fraction; 
     return 1; 
    } 
}; Parent.world.rayCast(callback,p1,p2); 
+0

あなたは正しいことを答えとして解決策を提出しました –

関連する問題