Я использую класс 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) {
}
}