提问者:小点点

Libgdx/Physics Editor身体旋转


还有一个美好的夜晚。

我有以下问题:

一个Box2d动态体,带有一个夹具,所有顶点从体的原点以位置x/y放置。http://i.stack.imgur.com/MXQRr.png

但是旋转是在身体原点0/0上,而不是在质量中心。

所以我尝试了以下方法:

1:将身体的原点设置在身体的中间(顶点正负) 问题:旋转工作,精灵定位几乎是不可能的

2:设置海量数据中心=原点Body.x宽度/ 2,原点Body.y高度/ 2问题:就像我什么都不做,仍然围绕原点0,0旋转

在下面的代码片段中,您可以看到我的实例化。

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.DynamicBody;
    bodyDef.position.set(new Vector2(200, 2));

    body = world.createBody(bodyDef);

    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.density = 0.6f;
    fixtureDef.friction = 0.4f;
    fixtureDef.restitution = 0.2f;


    bodyLoader.attachFixture(body, "Rocket1n2", fixtureDef, WIDTH);
    originOfBody = bodyLoader.getOrigin("Rocket1n2", WIDTH);
    MassData data = body.getMassData();
    data.center.set(Box2DUtils.getWidth(body) / 2, 0);
    data.I = body.getMassData().I; //without this line programm fails with assertion
    body.setMassData(data);
    Vector2 cpy = data.center.cpy();

我用下面的代码旋转播放器:

body.setAngularVelocity(addition); //addition is predefined(atm 1 / -1)

我目前使用aurelia(?)的身体物理编辑器与一些黑客工作,我对其他对象没有任何问题,因为我不旋转它们。放置就像一个魅力。

我希望我犯了一个重大错误…通常box2d必须自动计算旋转中心(质量中心)?

这次我身不由己。:(


共1个答案

匿名用户

我建议你用第一种方法工作。

将身体的原点设置在身体的中间(顶点正负)问题:旋转工作,精灵定位几乎是不可能的

旋转效果很好,但精灵定位很困难。去年我在做物理游戏时也遇到了同样的问题。帮助我的是看清楚定位是如何工作的。

Box2D主体是中心聚焦的。也就是说,调用物体的位置,会得到物体的中间。精灵是角聚焦的,这意味着精灵的位置是它的左下角。因此,你不能把它们都设定为一样的东西。我建议将精灵从身体的位置向下向左移动身体高度和宽度的一半。