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