Box2d 如何改变身体';开始与地面接触时的摩擦力?

Box2d 如何改变身体';开始与地面接触时的摩擦力?,box2d,libgdx,andengine,Box2d,Libgdx,Andengine,我正在制作platformer角色控件,类似这样-> 我正在使用ContactListener接口。 我的问题是(摩擦)链接中代码的这些行-> if(!grounded) { playerPhysicsFixture.setFriction(0f); playerSensorFixture.setFriction(0f); } else { if(!Gdx.input.isKeyPressed(Keys.A) && !Gdx.inp

我正在制作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()方法中更改角色的摩擦力时,已经启动的conact的摩擦力不会更改。有人能帮我解决这个问题吗?

来自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的夜间,这些新方法是可用的


因此,请在您的
ContactListener

中设置
联系人上的摩擦力,谢谢您的建议,但当我更改联系人时,它不会在结束前刷新。“我做错了什么?”沙克说,事实上我自己从来没有这样用过。我可以在Contact.setFriction的JavaDoc中读到这样的内容:“覆盖默认的摩擦混合物。您可以在b2ContactListener::PreSolve中调用它。该值在设置或重置之前保持不变。”。你把它设定在预解决模式吗?谢谢你@noone,你救了我的命。我知道我应该避免这样的评论,但是,我非常激动,因为它是有效的。我将其设置为preSolve(),但方式不对。现在我有了一个布尔变量,我用它在preSolve()上设置摩擦力。