As the Step
method works with a time step of 1/30 seconds, we need to multiply the force by 30
, so let's change 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 forceByMassByTime:b2Vec2=forceByMass.Copy(); forceByMassByTime.Multiply(30); var sphereCenter:b2Vec2=sphereVector[0].GetWorldCenter(); sphereVector[0].ApplyForce(forceByMassByTime,sphereCenter); sphereCenter=sphereVector[1].GetWorldCenter(); sphereVector[1].ApplyImpulse(forceByMass,sphereCenter); sphereVector[2].SetLinearVelocity(force); addEventListener(Event.ENTER_FRAME,updateWorld); }
The concept is the same we applied earlier wherein...