В настоящее время я пытаюсь понять, как заставить обнаружение столкновений работать с libgdx и tiled. Я собираю все тела из мозаичных элементов в массиве
. Это код, в котором я беру тела из мозаичных элементов и сохраняю их в массиве:
public static Array<Body> parseTiledObjectLayer(World world, MapObjects mapObjects, int layerValue) {
switch (layerValue) {
case 0:
Array<Body> groundBodies = new Array<Body>();
for (MapObject mapObject : mapObjects) {
Shape shape;
if (mapObject instanceof PolylineMapObject) {
shape = createPolyline((PolylineMapObject) mapObject);
} else if (mapObject instanceof RectangleMapObject) {
shape = createRectangle((RectangleMapObject) mapObject);
} else if (mapObject instanceof PolygonMapObject) {
shape = createPolygon((PolygonMapObject) mapObject);
} else {
continue;
}
Body body;
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.StaticBody;
body = world.createBody(bodyDef);
body.createFixture(shape, 0);
groundBodies.add(body);
shape.dispose();
}
return groundBodies;
case 1:
Array<Body> objectBodies = new Array<Body>();
for (MapObject mapObject : mapObjects) {
Shape shape;
if (mapObject instanceof PolylineMapObject) {
shape = createPolyline((PolylineMapObject) mapObject);
} else if (mapObject instanceof RectangleMapObject) {
shape = createRectangle((RectangleMapObject) mapObject);
} else if (mapObject instanceof PolygonMapObject) {
shape = createPolygon((PolygonMapObject) mapObject);
} else {
continue;
}
Body body;
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.StaticBody;
body = world.createBody(bodyDef);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
body.createFixture(shape, 0);
objectBodies.add(body);
shape.dispose();
}
return objectBodies;
default: //if default returns null we don't have to return null outside the switch loop and if we return something
//inside a switch statement we don't use the statement break;
return null;
}
}
Теперь в другом классе я возвращаю статическиймассив для сбора информации из него и в этом другом классе я также реализую ContactListener.
В этой переменной я получаю приведенный выше статический массив:
private Array<Body> objectBodies = MapLoader.parseTiledObjectLayer(world, map.getLayers().get(1).getObjects(), 1);
objectBodies.get(1).setUserData("Object");
и здесь я также пытаюсь назначитьUserData для столкновения.
Теперь здесь я на самом деле пытаюсь проверить, есть ли столкновение:
@Override
public void beginContact(Contact contact) {
Fixture body1;
Fixture body2;
if(contact.getFixtureA().getUserData() == "Player"){
body1 = contact.getFixtureA();
body2 = contact.getFixtureB();
} else {
body1 = contact.getFixtureB();
body2 = contact.getFixtureA();
}
if(body1.getUserData() == "Player" && body2.getUserData() == "Object"){
System.out.println("collided");
}
}
Все выглядит хорошо, но по какой-то причине, когда сталкиваются Player и Object, кажется, что ничего не происходит. У меня нет этой ошибки при установке пользовательских данных внутри статического метода. Любая помощь оценена.