Game Development Reference
In-Depth Information
Applying an impulse to get a linear
velocity
Now, given two sleeping spheres with the same mass and a force to apply, if
SetLinearVelocity sets the velocity despite the mass and ApplyImpulse is
affected by the mass, what if we apply to ApplyImpulse a force which is "mass"
times the force applied to SetLinearVelocity , changing the Main function in the
following way:
public function Main() {
world=new b2World(new b2Vec2(0,10),true);
debugDraw();
floor();
sphereVector=new Vector.<b2Body>();
for (var i:int=0; i<3; i++) {
sphereVector.push(sphere(170+i*150,410,40));
}
var force:b2Vec2=new b2Vec2(0,-15);
var forceByMass:b2Vec2=force.Copy();
forceByMass.Multiply(sphereVector[1].GetMass());
var sphereCenter:b2Vec2=sphereVector[0].GetWorldCenter();
sphereVector[0].ApplyForce(force,sphereCenter);
sphereCenter=sphereVector[1].GetWorldCenter();
sphereVector[1].ApplyImpulse(forceByMass,sphereCenter);
sphereVector[2].SetLinearVelocity(force);
addEventListener(Event.ENTER_FRAME,updateWorld);
}
We also have a couple of new concepts. First, look at the Copy method, used to copy
a b2Vec2 object to avoid new vector from being handled by reference. Then, the
Multiply method multiplies a b2Vec2 object by a given number, which in this case
is the mass of the sphere. The GetMass method of b2Body returns the mass of the
body in kilograms. In the end, we defined a new force called forceByMass , and we
applied it to the middle sphere.
Test the movie and you will see both the middle and the right spheres jump at the
same height:
 
Search WWH ::




Custom Search