1

私はbox2dを初めて使用し、2つのボディの間にジョイントを作成しようとしました。私は次のようなジョイントを書きました

b2RevoluteJointDef jointDef;

        jointDef.bodyA=worm_head;
        jointDef.bodyB=worm_body;

        jointDef.lowerAngle = -0.25f * b2_pi; // -45 degrees

        jointDef.upperAngle = 0.25f * b2_pi; // 45 degrees
        jointDef.enableLimit=true;
        jointDef.maxMotorTorque = 10.0f;

        jointDef.motorSpeed = 10.0f;

        jointDef.enableMotor = true;
        joint=(b2DistanceJoint*)_world->CreateJoint(&jointDef);

しかし、頭が動いているときは体は動いていません。

私のダニの方法は

- (void)tick:(ccTime) dt {

    //we update the position of the b2body based on the sprite position
    for (b2Body* body = _world->GetBodyList(); body != nil; body = body->GetNext())
    {
        if (body->GetUserData() != NULL) {
            CCSprite *spritedata = (CCSprite *)body->GetUserData();

            if(spritedata.tag==1)
            {
                b2Vec2 b2Position = b2Vec2(SCREEN_TO_WORLD(spritedata.position.x),
                                   SCREEN_TO_WORLD(spritedata.position.y));
                float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(spritedata.rotation);
                body->SetTransform(b2Position,b2Angle);
            }
            else {
                spritedata.position = ccp(body->GetPosition().x * PTM_RATIO,
                                       body->GetPosition().y * PTM_RATIO);
                spritedata.rotation = -1 * CC_RADIANS_TO_DEGREES(body->GetAngle());
            }

        }

    }
}

なぜ動かないのですか?コードをどのように変更すればよいですか?

4

1 に答える 1

1

b2RevoluteJointDefでは、1つのボディは静的ボディで、もう1つは動的ボディです。私の問題は、2つの動的問題を使用しています。今、それは解決しました。

于 2011-03-07T03:34:11.580 に答える