jBox2D Circle最终会在水平或垂直方向上移动

| 我试图在4墙之间实现一个圆跳动。但是,该圆的初始速度矢量无关紧要,过了一段时间,它总是最终水平或垂直移动。这是正常行为吗?如果没有,我该如何解决? 谢谢你的回复。 墙:
BodyDef bd = new BodyDef();
    Body body = w.createBody(bd);
    PolygonDef sd = new PolygonDef();
    sd.density = 0.0f;
    sd.friction = 0.01f;
    sd.restitution = 1f;

    sd.setAsBox(250, 10f, new Vec2(250, 1), 0);
    body.createShape(sd);

    sd.setAsBox(250, 10f, new Vec2(250, 499), 0.0f);
    body.createShape(sd);

    sd.setAsBox(250, 10f, new Vec2(1, 250), (float) (Math.PI / 2));
    body.createShape(sd);

    sd.setAsBox(250, 10f, new Vec2(499, 250), (float) (Math.PI / 2));
    body.createShape(sd);
//圆圈:
BodyDef bd = new BodyDef();
    bd.position.set((float) (Math.random() * 400 + 50), (float) (Math.random() * 400 + 50));
    //bd.isBullet = true;
    Body body = w.createBody(bd);
    Vec2 v = new Vec2((float) (Math.random() * 20 - 10), (float) (Math.random() * 20 - 10));
    System.out.println(body + \"  \" + v);
    body.setLinearVelocity(v);
    body.setAngularVelocity(0.1f);

    CircleDef sd = new CircleDef();
    sd.radius = (float) (Math.random() * 40 + 5);
    sd.density = 15.0f;
    sd.restitution = 0.8f;

    body.createShape(sd);
    body.setMassFromShapes();
    
已邀请:
尝试将球的夹具的摩擦力设置为0。 我的故事: 我有一个类似的设置和问题(4面墙,没有重力,球在里面弹跳-虽然在LibGDX下,但不是jBox2D)。经过数小时的搜索和摆弄,我发现将球夹具的摩擦力设置为0可使球在壁内正确反弹/反射。非零值,它会以奇数个反射角(如预期的那样不是正方形/直角)反弹几次,最终以水平或垂直反弹的稳态结束。 有关我的案件的更多信息,以防与所有人相关(Google对此几乎一无所获!): 凝视了很久之后,我终于意识到它实际上并没有完全在水平或垂直方向上弹跳。基于我对物理学的认识(当然非常差),我认为Box2D的某处存在一个错误; w.l.o.g在水平墙上弹跳,您会期望v.x * = -1f;但在稳定状态下,它也会做v.y * = -1f。角速度没有影响(我什至尝试在物体上设置固定角度,并在每个刻度上分别向对象添加角速度抖动),并且与体型无关(使壁运动,静态和动态)都产生了相同的效果)。我尝试将速度阈值设置为0f,将其设置为默认值,并且将皮肤半径设置为无。恢复原状的更改将影响到在水平/垂直稳态下结束需要多长时间;但尽管如此,它始终可以达到目标。 效果可能与(基于op声称发生在无重力空间中的速度影响反射角的速度有关):http://www.box2d.org/forum/viewtopic.php?f=3&t=7716     

要回复问题请先登录注册