Как заставить столкновение работать с userData в Tiled? (LigGDX) - PullRequest
0 голосов
/ 06 октября 2019

В настоящее время я пытаюсь понять, как заставить обнаружение столкновений работать с 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, кажется, что ничего не происходит. У меня нет этой ошибки при установке пользовательских данных внутри статического метода. Любая помощь оценена.

...