我试图在跳跃游戏工作中使用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);
}
提前致谢。