微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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,499),0.0f);
    body.createShape(sd);

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

    sd.setAsBox(250,new Vec2(499,(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     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。