对于旋转关节场常见的包括如下:
- 滚轮或滚筒
- 链条或悬桥(使用多个旋转连接器)
- 破布娃娃的关节
- 转门,弹射器,杠杆
创建旋转关节
创建旋转关节首先设置b2RevoluteJointDef属性,然后用世界对象创建之.
然后我们看一堆关于旋转关节的属性。
- localAnchorA - 基于刚体A的本地坐标系,在刚体A上的点,刚体A围绕这一点进行旋转.
- localAnchorB - 基于刚体B的本地坐标系,在刚体B上的点,刚体B围绕这一点进行旋转.
- eferenceAngle - 刚体B减去刚体B的弧度值.Box2D中角度用弧度表示.
- enableLimit - 关节的限制是否开启
- lowerAngle - 角度的最低限制
- upperAngle - 角度的最高限制
- enableMotor -关节马达是否开启
- motorSpeed - 关节马达的目标速度(线性速度)
- maxMotorTorque - 马达允许使用的最大扭矩值.扭矩就是力矩.力矩 = 力*力臂.
下面就用图形化来详细解释这些属性对旋转关节(RevoluteJoint)的作用.
1.localAnchorA 和 localAnchorB.
这两个属性实际都是坐标点.而这两个坐标点都是基于刚体A和刚体B的自身本地坐标系而言的.比如:刚体A是一个宽度和高度都是4的正方形.若localAnchorA是b2Vec2(2,2).则localAnchorA这个点就在刚体A的最右上角.因为刚体A的原点(origin point)是在刚体A的正中心(刚体A的锚点默认是(0.5,0.5)),所以b2Vec2(2,2)就自然是在正方形的最右上角.
见下图:
见上图:假设正方形的宽高是2,原点是在正中心.则localAnchorA(1,1)就在其右上角. localAnchorB(0,0)就是圆的正中心.这样就相当于把正方形的右上角和圆的中心重合,并用一个旋转关节(RevoluteJoint)进行固定.就像一颗钉子一样.
2.eferenceAngle 参考角度.
参考角度实际上就是刚体B减去刚体A的角度.如果这个值为0,就是表示两个刚体的角度差为0,参考角度实际上就是关节的角度,在程序中可以通过GetJointAngle()来查看关节的旋转程度。当你使用关节限制(joint limits)的时候,参考角度还是有用的。
看下图: