2016-10-11 59 views
0

我使用RayCastCallback接口ıfLibGDX。我找不到從光線開始到最近點的方法。它返回射線擊中的隨機夾具。我怎樣才能得到射線和夾具之間最接近的碰撞點?libgdx box2d raycast最近的燈具

回答

0

聽起來就像你已經獲得了大部分的代碼,因爲你從你的raycast中獲得固定裝置。你只需要循環播放由raycast命中的所有燈具並記住最接近的一個。例如:

public class SomeClass { 

    private World world; 
    private Vector2 fromPoint; 
    private Vector2 toPoint; 
    private Vector2 collisionPoint = new Vector2(); 
    float closestFraction = 1.0f; 

    // ... rest of code ... 

    private void calculateCollisionPoint() { 
     RayCastCallback callback = new RayCastCallback() { 

      @Override 
      public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { 
       if (fraction < SomeClass.this.closestFraction) { 
        SomeClass.this.closestFraction = fraction; 
        SomeClass.this.collisionPoint.set(point); 
       } 

       return 1; 
      } 
     }; 

     world.rayCast(callback, fromPoint, toPoint); 
    } 
} 
+0

感謝您的回答。我其實找到了答案。如果你返回小數部分而不是1,那麼如果你調用world.rayCast,它會縮小距離。我認爲你的代碼有問題。我f – Thracian

+0

我是新來的stackoverflow,我coudn't編輯我以前的評論。你的回答是正確的,比返回分數更精確。如果固定裝置的順序很重要,上面的代碼可以爲你帶來想要的東西。再次感謝。 – Thracian

+0

因此,iv'e得到了最低的數字(最接近的分數),但是我現在怎麼辦?我怎樣才能「打印最近的燈具班」?如果(fixture.getFilterData()。categoryBits == FilterCollisionManager.ENEMY_BIT){ ((ObjectManager)fixture.getUserData())。doSomeThing();' – ROSA