带有RevoluteJoint的Box2d纺车

时间:2012-12-10 17:27:27

标签: java libgdx box2d physics

我的目标是制造一个缓慢旋转的轮子,它应该指向重力所在的位置。我正在使用libgdx for Android开发这个,当设备旋转时(我正在使用加速度计)轮子应该旋转。

这是用box2d编辑器制作的轮子:wheel http://i45.tinypic.com/2dkkghv.jpg

在时间= 0时,车轮指向南方,重力为(0,-10),所以它应该保持这种状态..但事实并非如此。正如你在图片中看到的那样,车轮慢慢转动CCW,直到达到一个让你认为重力就像(10,0)的点;

我的猜测是与群众中心有关,但当我试图改变时,绝对没有任何事情发生。

以下是一些代码:

世界

world = new World( new Vector2(0, -10), false );

渲染

public void render() {
    world.step(1/2f, 6, 2);
    debugRenderer.render(world, camera.combined);
}

轮子创建

    BodyDef engranajeBodyDef = new BodyDef();
    engranajeBodyDef.position.set(0,0);
    engranajeBodyDef.type = BodyType.DynamicBody;
    engranajeBodyDef.angularDamping = 0.1f;

    FixtureDef engranajeFixture = new FixtureDef();
    engranajeFixture.density = 10;
    engranajeFixture.friction = 0.1f;
    engranajeFixture.restitution = 0f;
    engranajeFixture.filter.groupIndex = -1;

    Body engranajeBody = world.createBody(engranajeBodyDef);

    bodyLoader.attachFixture(engranajeBody, "engranaje", engranajeFixture, 501);

    RevoluteJointDef engranajeJointDef = new RevoluteJointDef();
    engranajeJointDef.bodyA = bgBody;
    engranajeJointDef.bodyB = engranajeBody;
    engranajeJointDef.collideConnected = false;
    engranajeJointDef.localAnchorA.set(0, 0);
    engranajeJointDef.localAnchorB.set(0, 0);

    world.createJoint(engranajeJointDef);

车轮附着的假人身体

    BodyDef bgBodyDef = new BodyDef();
    bgBodyDef.type = BodyType.StaticBody;
    bgBodyDef.position.set(0,0);

    bgBody = world.createBody(bgBodyDef);
    PolygonShape bgShape = new PolygonShape();
    //bgShape.setAsBox(camera.viewportWidth / 2, camera.viewportHeight / 2);
    bgShape.setAsBox(GAME_WIDTH,GAME_HEIGHT);

    bgBody.createFixture(bgShape, 1);
    bgShape.dispose();

这是轮子在重力(0,-10)停止的地方,而我用的精灵让这个问题变得更加丰富多彩:)

wheel sprite http://i45.tinypic.com/30kvytk.jpg

任何帮助理解这一点并向我指出任何方向都将非常感激。

Leandro的。

0 个答案:

没有答案