Ближайшее приспособление libgdx box2d raycast

я использую интерфейс RayCastCallback с LibGDX. Я не мог найти способ получить ближайшую точку от начала луча. Он возвращает случайные приборы, которые попали под луч. Как я могу получить ближайшую точку столкновения между лучом и прибором?


person Thracian    schedule 11.10.2016    source источник


Ответы (1)


Похоже, у вас есть большая часть кода, так как вы получаете приборы обратно из своего 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);
    }
}
person Peter R    schedule 11.10.2016
comment
Спасибо за ответы. Я действительно нашел ответ. Если вы возвращаете дробь вместо 1, расстояние обрезается, если вы вызываете world.rayCast инкурсивно. Я думаю, что-то не так с вашим кодом. Если - person Thracian; 12.10.2016
comment
Итак, у меня есть наименьшее число (ближайшая дробь), но как мне теперь что-то сделать с прибором? Как я могу напечатать класс ближайшего прибора? if(fixture.getFilterData().categoryBits == FilterCollisionManager.ENEMY_BIT) { ((ObjectManager) fixture.getUserData()).doSomeThing(); - person Nimitack; 23.01.2017