Box2d基本类型

 

物体类型(Body Type)

b2_staticBody

static物体在模拟时不会运动,就好像它具有无穷大的质量。在Box2D内部,会将static物体的质量存储为零。static物体可以让用户手动移动,它速度为零,另外也不会和其它static或kinematic物体相互碰撞。

b2_kinematicBody

kinematic物体在模拟时以一定速度运动, 但不受力的作用。它们可以让用户手动移动,但通常的做法是设置一定速度。kinematic物体的行为表现就好像它具有无穷大的质量,Box2D将它的质量存储为零。kinematic物体并不会和其它static或kinematic物体相互碰撞。

b2_dynamicBody

dynamic物体被完全模拟。它们可以让用户手动移动,但通常它们都是受力的作用而运动。dynamic物体可以和其它所有类型的物体相互碰撞。dynamic物体的质量总是有限大的,非零的。如果你试图将它的质量设置为零,它会自动地将质量修改成一千克。

物体是fixtures的骨架,带着fixture在世界中运动。Box2D中的物体总是刚体(rigid body)。也就是说,同一刚体上的两个fixture,永远不会相对移动。

fixture有可碰撞的几何形状和密度(density)。物体通常从它的fixture中获得质量属性。当物体构建之后,你也可以改写它的质量属性。这将在下面讨论到。

通常你会保存所有你所创建物体的指针,这样你就能查询物体的位置,用于更新图形实体的位置。另外在不需要它们的时候,你也可以使用指针去摧毁它们。

形状(shape):

2D几何对象,比如圆形(circle)或多边形(polygon)。在box2dweb中,形状主要为以下几种,b2CircleShape.js 圆形,b2PolygonShape.js 凸多边形,b2EdgeShape.js 边缘图形。

刚体(rigid body):

十分坚硬的物质,坚硬得像钻石,它上面任意两点之间的距离都保持不变。box2dweb中,用物体(body)来表示刚体。

夹具(fixture):

fixture负责将形状绑定到物体之上,并有一定的材质属性,比如密度(density),摩擦(friction)和恢复(restitution)。

密度(density):

fixture的密度用来计算父物体的质量属性。密度值可以为零或者是整数。你所有的fixture都应该使用相似的密度,这样做可以改善物体的稳定性。在碰撞的等式中我们使用 密度*面积=质量 ,密度如果是 0 或者null,将会是一个静止的对象。

摩擦(friction):

摩擦可以使对象逼真地沿其它对象滑动。Box2D支持静摩擦和动摩擦,两者都使用相同的参数。摩擦在Box2D中会被精确地模拟,摩擦力的强度与正交力(称之为库仑摩擦)成正比。摩擦参数经常会设置在0到1之间,也能够是其它的非负数,0意味着没有摩擦,1会产生强摩擦。当计算两个形状之间的摩擦时,Box2D必须联合两个形状的摩擦参数。

恢复(restitution):

恢复可以使对象弹起。恢复的值通常设置在0到1之间。一个球掉落到桌子上,值为0表示着小球不会弹起。值为1表示小球的速度跟原来一样,只是方向相反,这称为完全弹性碰撞。因此restitution 通常也被认为是弹性。

约束(constraint):

约束是个物理连接,用于消除物体的自由度。在2D中, 物体有3个自由度(水平,垂直,旋转)。如果我们把一个物体钉在墙上(像钟摆那样),那就把它约束到了墙上。这个时候,此物体就只能绕着钉子旋转,所以这个约束消除了它2个自由度。

接触约束(contact constraint ):

一种特殊的约束, 设计的目的是为了防止刚体被穿透,也用于模拟摩擦和恢复。接触约束不用你来创建,它们会自动被Box2D生成。

关节(joint):

它是一种用于把两个或多个物体固定到一起的约束。Box2D支持的关节类型有:转动(b2RevoluteJoint.js),棱柱(b2PrismaticJoint.js),距离(b2DistanceJoint.js)等等。关节可以支持限制(limits)和马达(motors)。

关节限制(joint limit):

一个关节限制(joint limit)限定了一个关节的运动范围。例如人类的胳膊肘只能做某一范围角度的运动。

关节马达(joint motor):

一个关节马达能依照关节的自由度来驱动所连接的物体。例如,你可以使用一个马达来驱动一个肘的旋转。

世界(world):

一个物理世界就是各种,刚体(bodies),夹具(fixtures), 约束(constraints)相互作用的集合。

 

发表评论

你必须 登录后 才能对文章进行评论!

Design By Inzaghi | 京ICP备16047555号-1