March 7, 2011

How to make gear joint in Box2D, iPhone?

Gear joints are one of the real specialities of Box2D.

By creating gear joints between two bodies you can actually simulate a real world gear. For creating a gear joint you need two bodies connected by a revolute or prismatic joint.

The below code creates two bodies in the shape of a circle which is actually attached to the ground. however you can also create joints without joining it with the ground. Here you have to make a ground with possible four fixtures or no fixtures simply creating a body.

b2Body* body1 = circle1;b2Vec2 pos1 = circle1 -> GetPosition();//get position of first body.....b2Body* body2 = circle2;b2Vec2 pos2 = circle2 -> GetPosition(); // get position of second body....revJointDef.Initialize(ground, circle1, pos1);b2RevoluteJointDef revJointDef2;revJointDef2.Initialize(ground, body2, pos2)//revolute joint is initializedjoint1 = world->CreateJoint(&revJointDef;); //First joint.....revJointDef2.maxMotorTorque = 20000.000000f; //connect a motor to the joint2revJointDef2.motorSpeed = 120.000000f / 60; //set the rotation speed.....revJointDef2.enableMotor = true;// enable the motor.....joint2 = world->CreateJoint(&revJointDef2;);//Second joint.....gearJointDef.bodyA = body1;gearJointDef.bodyA = body2;gearJointDef.joint1 = joint1;gearJointDef.joint2 = joint2;gearJointDef.collideConnected = true;gearJointDef.ratio = circleShape2.m_radius/circleShape1.m_radius;world->CreateJoint(&gearJointDef;); // this line creates the joint.

Please leave your valuable comments……………………..

Leave a Reply Cancel reply