Libgdx /物理编辑器身体轮换

时间:2015-08-13 23:11:21

标签: libgdx box2d

和一个愉快的夜晚。

我遇到以下问题:

一个Box2d动态体,其中一个夹具的所有顶点都放置在身体原点的正位x / y处。 http://i.stack.imgur.com/MXQRr.png

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

所以我尝试了这些方法:

1: 设置身体中间的身体原点(顶点正面和负面) 问题:旋转工作,Sprite定位几乎不可能

2: 设置海量数据中心= originOfBody.x + width / 2,originOfBody.y + height / 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(?)的Body Physics Editor和一些有效的黑客,我对其他对象没有任何问题,因为我不旋转它们。放置就像一个魅力..

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

这次我不能帮助自己.. :(

1 个答案:

答案 0 :(得分:1)

我建议你采用第一种方法。

  

在身体中间设置身体的原点(顶点为正和   negativ)问题:旋转工作,Sprite定位差不多   不可能

旋转工作正常,但精灵定位很困难。我去年制作一个物理游戏时遇到了同样的问题。是什么帮助我确切了解定位的工作原理。

Box2D机构以中心为中心。这意味着调用正文的位置会给你对象的中间位置。精灵是角落聚焦的,这意味着精灵的位置是它的左下角。因此,您不能将它们中的每一个都设置为相同的东西。我建议将精灵从身体的位置向下和向左移动身体高度和宽度的一半。