Я работаю над игрой в LibGDX и настроил карту с помощью Tiled. Я добавил настраиваемое свойство String к объектам в определенном слое, чтобы получить дополнительную информацию о том, какой объект он представляет.
У меня настроен ContactListener, который вызывает метод в абстрактном классе объекта карты. Слушатель выглядит так:
@Override
public void beginContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
if (fixtureA.getUserData() == "player" || fixtureB.getUserData() == "player") {
// Get either fixture A or B, depending on which of them is the player fixture
Fixture player = fixtureA.getUserData() == "player" ? fixtureA : fixtureB;
// Get the colliding object, depending on which of them is the player fixture
Fixture collidedObject = player == fixtureA ? fixtureB : fixtureA;
// Determine what kind of object the player collided with and trigger the respectable method
if (collidedObject.getUserData() instanceof InteractiveMapTileObject) {
((InteractiveMapTileObject) collidedObject.getUserData()).onPlayerBeginContact();
} else if (collidedObject.getUserData() instanceof Enemy) {
((Enemy) collidedObject.getUserData()).onPlayerBeginContact();
}
}
}
Когда игрок попадает в объект экземпляра InteractiveMapTileObject, вызывается метод onPlayerBeginContact (), который выглядит следующим образом:
@Override
public void onPlayerBeginContact() {
MapObjects objects = playScreen.getMap().getLayers().get("weapon").getObjects();
for (MapObject object : objects) {
if (object.getProperties().containsKey("weapon_name")) {
String weaponName = object.getProperties().get("weapon_name", String.class);
Gdx.app.log("Picked up weapon", weaponName);
}
}
}
Здесь я получаю объекты слоя «оружие» на карте, а затем просматриваю их, чтобы найти правильное свойство и его значение. Это прекрасно работает и так.
Проблема теперь в том, что у меня, очевидно, есть несколько объектов в слое и, следовательно, несколько объектов MapObject. Мне нужен способ идентифицировать объект, с которым игрок столкнулся, а затем получить его свойство.
Можно ли это сделать с помощью ContactListener или мне нужно реализовать что-то еще? Я уже просмотрел массу сообщений, но мне не повезло.