ApplyForce、ApplyImpulse和SetLinearVelocity。
它们都是b2Body类的公共方法,而且它们都接收一个b2Vec2类型向量参数。关于向量的知识。
1.力,循序渐进——ApplyForce
顾名思义,ApplyForce方法会在刚体上施加一个力。学过物理力学的同学都知道,F=ma,有了力F就有了加速度a,有了加速度,物体就会有速度,就会慢慢动起来。(但是不会立马动起来,因为力不度)。
ApplyForce施加的力可以叠加,如
ballBody->ApplyForce(force1,ballBody->GetWorldCenter());//GetWorldCenter()方法用来获取刚体的重心
ballBody->ApplyForce(force2,ballBody->GetWorldCenter());
这样施加给ballBody的力就为force1与force2的和。
举个简单的例子,小明推一个静止的箱子,箱子不会立马飞出去,而是慢慢的、越来越快的动起来(减速也一样)。
2.速度,叠加——ApplyImpulse
与ApplyForce不同,ApplyImpulse不会产生力,而是直接影响刚体的速度。通过ApplyImpulse方法添加的速度会与刚体原有的速度叠加,产生新的速度。
3.一触即发——SetLinearVelocity
setLinearVelocity与ApplyImpulse一样,直接影响刚体的速度。不一样的是,setLinearVelocity添加的速度会覆盖刚体原有的速度。不过,在SetLinearVelocity方法不会自动唤醒sleeping的刚体,所以在调用该方法之前,记得将刚体body.wakeUp()一下。
b2Vec2 velocity = b2Vec2(x,y);
ballBody->SetLinearVelocity(velocity);//设置刚体的速度
velocity1 = ballBody->GetLinearVelocity();//得到刚体的速度