接触地面时如何改变身体的摩擦力?

时间:2013-10-14 14:19:58

标签: box2d libgdx andengine

我制作平台角色控件,就像这样 - > BOX2D platformer 我正在使用ContactListener接口。 我的问题是(摩擦)来自链接中代码的这些行 - >

if(!grounded) {
    playerPhysicsFixture.setFriction(0f);
    playerSensorFixture.setFriction(0f);            
} else {
    if(!Gdx.input.isKeyPressed(Keys.A) && !Gdx.input.isKeyPressed(Keys.D) && stillTime > 0.2) {
        playerPhysicsFixture.setFriction(100f);
        playerSensorFixture.setFriction(100f);
    }
    else {
        playerPhysicsFixture.setFriction(0.2f);
        playerSensorFixture.setFriction(0.2f);
    }
}

当脚已经与地面接触时,我无法想象如何改变摩擦力。当我在我的角色的onUpdate()方法中改变摩擦时,已经启动的条件的摩擦力不会改变。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

来自b2Fixture:

// Set the coefficient of friction. This will _not_ change the friction of
// existing contacts.
void SetFriction(float32 friction);

所以你完全正确。在Box2D的最新版本中,他们添加了Contact.setFriction()来支持该行为。我不确定在哪个版本的libGDX中添加了这个版本的Box2D,但至少在libGDX的夜晚,这些新方法是可用的。

因此,请设置ContactContactListener的摩擦力。