0
我使用RayCastCallback接口ıfLibGDX。我找不到從光線開始到最近點的方法。它返回射線擊中的隨機夾具。我怎樣才能得到射線和夾具之間最接近的碰撞點?libgdx box2d raycast最近的燈具
我使用RayCastCallback接口ıfLibGDX。我找不到從光線開始到最近點的方法。它返回射線擊中的隨機夾具。我怎樣才能得到射線和夾具之間最接近的碰撞點?libgdx box2d raycast最近的燈具
聽起來就像你已經獲得了大部分的代碼,因爲你從你的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);
}
}
感謝您的回答。我其實找到了答案。如果你返回小數部分而不是1,那麼如果你調用world.rayCast,它會縮小距離。我認爲你的代碼有問題。我f – Thracian
我是新來的stackoverflow,我coudn't編輯我以前的評論。你的回答是正確的,比返回分數更精確。如果固定裝置的順序很重要,上面的代碼可以爲你帶來想要的東西。再次感謝。 – Thracian
因此,iv'e得到了最低的數字(最接近的分數),但是我現在怎麼辦?我怎樣才能「打印最近的燈具班」?如果(fixture.getFilterData()。categoryBits == FilterCollisionManager.ENEMY_BIT){ ((ObjectManager)fixture.getUserData())。doSomeThing();' – ROSA