box2d(libgdx)堆叠体不稳定

box2d(libgdx)堆叠体不稳定,libgdx,box2d,Libgdx,Box2d,当我把很多物体(长方形)叠在一起时,它们就站不稳了。即使恢复设置为0。它们是有弹性的,并且相互脱落。我尝试将密度设置为一个非常低的值,但它没有改变 有可能解决这个问题吗 shape.setAsBox(0.1f, 0.1f, new Vector2(0, 0), 0); bDef = new BodyDef(); bDef.type = BodyDef.BodyType.DynamicBody; bDef.position.set(0, 0); fDef.

当我把很多物体(长方形)叠在一起时,它们就站不稳了。即使恢复设置为0。它们是有弹性的,并且相互脱落。我尝试将密度设置为一个非常低的值,但它没有改变

有可能解决这个问题吗

    shape.setAsBox(0.1f, 0.1f, new Vector2(0, 0), 0);
    bDef = new BodyDef();
    bDef.type = BodyDef.BodyType.DynamicBody;
    bDef.position.set(0, 0);

    fDef.shape = shape;
    fDef.density = 0.001f;
    fDef.friction = 0.5f;
    fDef.restitution = 0.0f;

    for (int i = 1; i < 50; i++) {
        bDef.position.set(0, i * 0.201f);
        body1 = world.createBody(bDef);
        fixture = body1.createFixture(fDef);
    }
shape.setAsBox(0.1f,0.1f,新矢量2(0,0),0);
bDef=新的BodyDef();
bDef.type=BodyDef.BodyType.DynamicBody;
bDef.position.set(0,0);
fDef.shape=形状;
密度=0.001f;
摩擦系数=0.5f;
fDef.恢复=0.0f;
对于(int i=1;i<50;i++){
bDef.位置设置(0,i*0.201f);
body1=world.createBody(bDef);
fixture=body1.createFixture(fDef);
}

只要这是我认为是的问题,那么是的,这是可以解决的。尽管有额外的工作。但在短期内,不会

当我从Box2D2.3.2运行测试台的“垂直堆栈”测试时,我看到一堆盒子在一个垂直堆栈中相互叠放。首先它们堆叠,然后摆动,然后翻倒。这就是Box2D的工作原理。我不喜欢那种行为,所以我改变了它

我怀疑这与你看到的问题本质上是相同的。我用来修改它并获得稳定的堆叠行为的“修复”涉及更改内部Box2D库代码

从算法上讲,我修改了位置解析的方法,从解析每次应用一个碰撞流形点的脉冲,到解析按穿透深度顺序应用的脉冲,或者在它们几乎相等时同时应用的脉冲。代码方面,我基本上对Erin的b2ContactSolver::SolvePositionConstraintsb2ContactSolver::SolveToPositionConstraints方法(在Erin的b2ContactSolver.cpp中)进行了算法更改


此更改算法的代码位于(请参阅ContactSolver.cpp文件中的SolvePositionConstraint函数)。不幸的是,我没有一个只适用于这些方法的差异,因为我的代码更改超出了这些方法。此外,我所做的更改修改了Box2D库的公共界面,因此,即使您可以为您的平台构建它,您仍然需要将代码调整到我的新界面。

尝试增加框之间的间距,并允许它们下降,你可能把它们放在彼此的上面,导致它们横向移动。尝试了很多值。当它们彼此相撞时,它也不起作用。“地面”块的恢复是否也设置为0?另外,尝试增加密度,因为当它有更多质量时,反弹会更少。