1

私の目標は、重力のある場所を指す、ゆっくりと回転するホイールを作成することです。Android用のlibgdxを使用してこれを開発しています。デバイスが回転すると(加速度計を使用しています)、ホイールが回転するはずです。

box2d-editor で作成したホイールは次のとおりです。車輪

時間 = 0 では、車輪は南を指し、重力は (0, -10) であるため、そのままにしておく必要があります..しかし、そうではありません。写真でわかるように、ホイールが反時計回りにゆっくりと回転し、重力が (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)で停止する場所であり、この質問をよりカラフルにするために使用しているスプライトです:)

ホイールスプライト

これを理解し、私をあらゆる方向に向けるための助けは大歓迎です。

レアンドロ。

4

0 に答える 0