LIBGDX仅与盒子底部碰撞

时间:2013-12-24 19:16:19

标签: java libgdx box2d

我试图在跳跃游戏工作中使用box2D让我的碰撞正确但我有一些问题。玩家拥有Box Shape和Platform只是用chainShape制作的一条线。

第一个问题是我想只在玩家触摸平台时才能启用碰撞。我试图通过检查身体的y坐标来做到这一点,但它不起作用,因为平台和盒子底部之间的差异,而碰撞大约是0.5个单位。

第二个问题是,在单次触摸中,相同平台的碰撞开启两到三次。在这里,我不知道如何解决它。

我的代码中的实际碰撞代码是:

@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {
    if(fixtureA == fixture || fixtureB == fixture){
        return body.getLinearVelocity().y< 0; //&& (fixtureA.getBody().getPosition().y <= fixtureB.getBody().getPosition().y);
    }
    return false;
}

@Override
public void preSolve(Contact contact, Manifold oldManifold) {
    if(contact.getFixtureA() == fixture || contact.getFixtureB() == fixture){
        //System.out.println("Contact A: "+ contact.getFixtureA().getBody().getPosition().y);
        //System.out.println("Contact B: "+ contact.getFixtureB().getBody().getPosition().y);
        if(contact.getFixtureA().getBody().getPosition().y == contact.getFixtureB().getBody().getPosition().y)
            contact.setEnabled(true);
        else
            contact.setEnabled(false);
    }
}
//COLLISION CALCULATION
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
                body.applyLinearImpulse(0, jumpPower, body.getWorldCenter().x, body.getWorldCenter().y, true);
}

提前致谢。

0 个答案:

没有答案