Pregunta

Soy nuevo en Box2D y traté de crear unión entre dos cuerpos. Escribí una articulación como

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);

pero el cuerpo no se mueve cuando la cabeza está en movimiento.

mi método garrapata es

- (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());
            }

        }

    }
}

¿Por qué no se mueve? ¿Cómo debo cambiar mi código?

¿Fue útil?

Solución

En b2RevoluteJointDef, un cuerpo es cuerpo estático y otro es el cuerpo dinámico. Mi problema es el uso de dos problema dinámico. Ahora, los que resuelve.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top