This post is an enhanced version of my earlier blob post Creating a blob in Android with Box2D physics engine and AndEngine.. To introduce tautness to the overall blob structure I used revoluteJoint between adjacent bodies as follows
}
// Create a revoluteJoint between adjacent bodies – Lacks stiffness
for( int i = 1; i < nBodies; i++ ) {
final RevoluteJointDef revoluteJointDef = new RevoluteJointDef();
revoluteJointDef.initialize(circleBody[i], circleBody[i-1], circleBody[i].getWorldCenter());
revoluteJointDef.enableMotor = false;
revoluteJointDef.motorSpeed = 0;
revoluteJointDef.maxMotorTorque = 0;
this.mPhysicsWorld.createJoint(revoluteJointDef);
}
// Create a revolute joint between first and last bodies
final RevoluteJointDef revoluteJointDef = new RevoluteJointDef();
revoluteJointDef.initialize(circleBody[0], circleBody[19], circleBody[0].getWorldCenter());
revoluteJointDef.enableMotor = false;
revoluteJointDef.motorSpeed = 0;
revoluteJointDef.maxMotorTorque = 0;
this.mPhysicsWorld.createJoint(revoluteJointDef);
The motorSpeed, maxMotorTorque is set to 0 and the enableMotor is set to false. However I found that this joint still lacks stiffness.
So I replaced the revoluteJoint with the weldJoint which is probably more appropriate
// Create a weldJoint between adjacent bodies – Weld Joint has more stiffness
for( int i = 1; i < nBodies; i++ ) {
final WeldJointDef weldJointDef = new WeldJointDef();
weldJointDef.initialize(circleBody[i], circleBody[i-1], circleBody[i].getWorldCenter());
this.mPhysicsWorld.createJoint(weldJointDef);
}
// Create a weld joint between first and last bodies
final WeldJointDef weldJointDef = new WeldJointDef();
weldJointDef.initialize(circleBody[0], circleBody[19], circleBody[0].getWorldCenter());
this.mPhysicsWorld.createJoint(weldJointDef);
Here are clips of the the Blob with more attitude
You can clone the project from Github at Blob_v1
3 thoughts on “Blob with an attitude in Android”