Похоже, что у вас есть большая часть кода, так как вы получаете светильники с вашего рабаста. Вам просто нужно будет пройти через все светильники, пораженные 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 настойчиво. Я думаю, что что-то не так с вашим кодом. I f – Thracian
Я новичок в stackoverflow, я не могу изменить свой предыдущий комментарий. Ваш ответ правильный и более точный, чем возврат фракции. Если порядок светильников имеет значение, код выше может дать вам то, что нужно. Еще раз спасибо. – Thracian
Таким образом, у iv'e было самое низкое число (самая близкая фракция), но как я могу что-то сделать с приспособлением сейчас? Как я могу напечатать ближайший класс прибора? 'if (fixture.getFilterData(). CategoryBits == FilterCollisionManager.ENEMY_BIT) { ((ObjectManager) fixture.getUserData()). DoSomeThing();' – ROSA