我的目标是制造一个缓慢旋转的轮子,它应该指向重力所在的位置 . 我正在使用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
任何帮助理解这一点,并指出我在任何方向将非常感激 .
莱昂德罗 .