Проблема обнаружения столкновений - PullRequest
0 голосов
/ 26 октября 2018

Я использую класс InteractiveTileObject в качестве суперкласса для класса Coin, я настроил класс worldContactListner для прослушивания столкновения ч / б основного тела и объекта монеты. Код, приведенный ниже для worldcontactlistner, никогда не переходит на строку, которая имеет; System.out.println("Im here 2") (в классе WorldContactListner), я не понимаю, почему, класс coin является экземпляром InteractiveTileObject и должен выполнять метод onCollision. Пожалуйста, помогите мне определить, что не так. Код указан ниже;

public class Coin extends InteractiveTileObject {

    public Coin(World world, TiledMap map, Rectangle rectangle) {
        super(world, map, rectangle);
        fixture.setUserData(this);
    }

    @Override
    public void onCollision() {
        Gdx.app.log("Coin","Collision");
    }
}

public abstract class InteractiveTileObject {
    protected World world;
    protected TiledMap map;
    protected TiledMapTile tile;

    protected Body body;
    public Fixture fixture;


    public InteractiveTileObject(World world, TiledMap map, Rectangle rectangle) {


        this.world = world;
        this.map = map;
        BodyDef bodyDef = new BodyDef();
        FixtureDef fixtureDef = new FixtureDef();
        PolygonShape polygonShape = new PolygonShape();


        for (MapObject mapObject : map.getLayers().get(6).getObjects().getByType(RectangleMapObject.class)) {
            rectangle = ((RectangleMapObject) mapObject).getRectangle();
            bodyDef.type = BodyDef.BodyType.StaticBody;
            bodyDef.position.set((rectangle.getX() + rectangle.getWidth() / 2) / trollVersusZombies.PPM, (rectangle.getY() + rectangle.getHeight() / 2) / trollVersusZombies.PPM);

            body = world.createBody(bodyDef);

            polygonShape.setAsBox(rectangle.getWidth() / 2 / trollVersusZombies.PPM, rectangle.getHeight() / 2 / trollVersusZombies.PPM);
            fixtureDef.shape = polygonShape;

            fixtureDef.isSensor = true;
            fixture = body.createFixture(fixtureDef);

        }


    }

    public abstract void onCollision();

}

public class WorldContactListener implements ContactListener {

    @Override
    public void beginContact(Contact contact) {
        Fixture fixA = contact.getFixtureA();
        Fixture fixB = contact.getFixtureB();

        if( fixA.getUserData() == "body" || fixB.getUserData() == "body")
        {

            Fixture body = fixA.getUserData().equals("body") ? fixA : fixB;
            Fixture object = body == fixA ? fixB : fixA;
               System.out.println("Im here"); //Code comes here
            if(object.getUserData() instanceof InteractiveTileObject)
            {
                System.out.println("Im here 2"); //Code doesnt get here
                ((InteractiveTileObject)object.getUserData()).onCollision();
            }

        }
    }

    @Override
    public void endContact(Contact contact) {

    }

    @Override
    public void preSolve(Contact contact, Manifold oldManifold) {

    }

    @Override
    public void postSolve(Contact contact, ContactImpulse impulse) {

    }
}
...