Box2D篇:进阶知识整合(刚体操作,碰撞处理)
刚体操作
DestroyFixture(b2Fixture)
删除b2Fixture组件 通过b2World.Raycast和b2World.QueryAABB来获取要删除的b2Fixture组件
ApplyForce(force,point)
添加作用力到刚体上 force:要施加的力的大小,单位是N
point:要施加力的点,这是一个全局坐标(世界坐标)
ApplyImpulse(impulse,point)
添加冲量,单位是N*m。
ApplyTorque(Torque)
Torque:扭力大小,为正表示顺时针,为负表示逆时针,单位kg*rad/s
GetLoaclXXX,GetWorldXXX
用来实现本地坐标,向量和全局坐标,向量之间的转换
GetLocalCenter
获取刚体重心的本地坐标
GerWorldCenter
获取刚体重心的全局坐标
GetLoalPoint(worldPoint)
获取全局坐标点worldpoint在刚体坐标系统中的本地坐标
GetWorldPoint(localPoint)
获取本地坐标点localPoint在舞台坐标系统中的全局坐标
GetLocalVector(worldVector)
获取全局向量worldVector在刚体坐标系统中的本地向量
GetWorldVector(localVector)
获取本地向量localVector在舞台坐标系统中的全局向量
GetMass
返回刚体的质量,单位是kg
SetMassData
设置刚体质量
Split(callback)
callback是split的回调函数,参数为b2Fixture,一般对这个Fixture进行操作
GetAABB
AABB是“Axis Aligned Bounding Box”的缩写 返回能包围当前形状的最小矩形 lowerBound:表示b2AABB矩形上的左上角坐标 upperBound:表示b2AABB矩形上的右下角坐标
QueryAABB
查找所有与指定AABB有碰撞风险的b2Fixture对象
QueryShape
查找所有与指定shape发生碰撞的b2Fixture对象
RayCast(callback,poing1,point2)
在Box2D世界中投射一条光线,并查找这条光线上所有fixture对象。 callback:回调函数,参数有fixture,point,normal,fraction fixture:与线段发生碰撞的b2Fixture对象 point:碰撞点坐标位置(全局坐标) normal:垂直于线段与物体交叉边的单位向量 fraction:碰撞点point到起始点point1的距离占线段总长度的比例。
point1:射线起点 point2:射线终点
碰撞处理
认识碰撞
一种是因为形状上发生了接触或重叠所引起的常规碰撞。 另一种是潜在碰撞,指的是当形状的最小包围盒AABB发生接触或重叠时,所引发的碰撞。
b2Contact
实际应用中我们不需要主观创建b2Contact对象。 一个b2Contact对象从前在碰撞发生时被创建,会一直存在,直到碰撞双方最小包围盒FattenAABB不再有重叠,才会被销毁。
isTouching
Box2D中,将碰撞对象是否发生重叠保存在一个名为touching的属性中,调用isTouching函数可以读取这个Boolean类型的属性值。
SetTangentSpeed
它的作用是碰撞发生时,在碰撞面的切线方向,为碰撞刚体添加一个线性速度值speed,实现类似传送带的效果。
b2ContactListener
b2ContactListener是一个碰撞事件处理函数集合类,其中包含PreSolve,BeginContact,EndContact和PostSolve 我们通常需要继承b2ContactListener做一个自己的监听类,并通过World.SetContactListener方法将其设置为默认碰撞侦听对象