04
Май
2017

LibGdx коллизии

Здравствуйте, хочется реализовать jumpthru платформу. Использую box2d, в нем создаю два объекта: платформа(kinematicBody) и игрока(dynamicBody);

Платформа:

public Bucket(float x,float y, World world){
    this.world = world;
    BodyDef bdef = new BodyDef();
    bucket = new ChainShape();
    FixtureDef fdef = new FixtureDef();
    velocity = new Vector2();
    velocity.x = x/PPM;
    velocity.y = y/PPM;

    bdef.position.set(velocity.x,velocity.y);
    bdef.type = BodyDef.BodyType.StaticBody;

    bucket.createChain(new float[]{
            -36/PPM,22/PPM,-23/PPM,0,23/PPM,0,36/PPM,22/PPM
    });

    fdef.shape = bucket;

    body = world.createBody(bdef);
    fixture = body.createFixture(fdef);
    fixture.setUserData("bucket");

    body.setLinearVelocity(1,0);

    bucket.dispose();
}

Игрок:

public class Ball implements ContactFilter {
private World world;
private Body body;
private Fixture fixture;
private CircleShape circle;

public Ball(float y,World world){
    this.world = world;

    BodyDef bdef = new BodyDef();
    FixtureDef fdef = new FixtureDef();
    circle = new CircleShape();

    bdef.type = BodyDef.BodyType.DynamicBody;
    bdef.position.set(W/2/PPM,y/PPM);

    circle.setRadius(14/PPM);

    fdef.shape = circle;
    fdef.friction = 1f;

    body = world.createBody(bdef);
    fixture = body.createFixture(fdef);
    fixture.setUserData("ball");

    circle.dispose();
}

public Body getBody() {
    return body;
}

public Fixture getFixture() {
    return fixture;
}

public CircleShape getCircle() {
    return circle;
}

@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {

    if(fixtureA == fixture || fixtureB == fixture){
        return body.getLinearVelocity().y < 0;
    }
    return false;
}

}

Использую интерфейс ContactFilter, но немогу понять почему игрок не проходит сквозь платформы, в Интернете примеров про этот интерфейс не нашел.

Источник: https://ru.stackoverflow.com/questions/662052/libgdx-%D0%BA%D0%BE%D0%BB%D0%BB%D0%B8%D0%B7%D0%B8%D0%B8

Share

Тебе может это понравится...