昨天我们学习了
Box2D 的"距离关节"b2DistanceJoint
,并用它模拟了一个简单的自行车。今天我们来学习"马达关节" b2RevoluteJoint 。
"马达关节"b2RevoluteJoint同样连接了两个刚体bodyA和bodyB。不过和"马达关节"不同的是,它只有一个节点anchor,所以两个刚体都只能围绕这一个节点选择。另外,我们可以在这个节点anchor位置施加一个作用力maxMotorTorque,这样节点就会想马达一样转起来,所以我把它叫做"马达关节"。
还是不好理解,对吧!那就再打个比方,我把b2RevoluteJoint关节比作....电风扇。风扇叶是bodyA,马达是anchor,底座是bodyB,下面的图可以更好的解释这一点:
如上图所示,因为节点anchor在bodyA的圆心处,所以bodyA会围绕着节点anchor旋转。
b2RevoluteJoint的initialize方法结构如下: bA即bodyA,bB即bodyB,anchor即节点,具体的功能,我在前面都讲过了,就不再赘述了。
另外,如前面提到的,通过设置b2RevoluteJointDef的maxMotorTorque、motorSpeed和enableMotor,可以模拟马达旋转。这三个参数的作用分别如下:
用b2RevoluteJoint实现风扇的效果如下:
完整的代码和注释如下: 代码中用到了我写的静态类LDEasyBox2D,可以有效的简化代码,具体请参考 这里 。
点击刚体,还可以进行拖动,如果对鼠标拖动刚体,我建议你看看之前的 让刚体听我的——鼠标拖动刚体 。 OK 2012-08-28 b2RevoluteJoint关节.rar
"马达关节"b2RevoluteJoint同样连接了两个刚体bodyA和bodyB。不过和"马达关节"不同的是,它只有一个节点anchor,所以两个刚体都只能围绕这一个节点选择。另外,我们可以在这个节点anchor位置施加一个作用力maxMotorTorque,这样节点就会想马达一样转起来,所以我把它叫做"马达关节"。
还是不好理解,对吧!那就再打个比方,我把b2RevoluteJoint关节比作....电风扇。风扇叶是bodyA,马达是anchor,底座是bodyB,下面的图可以更好的解释这一点:
如上图所示,因为节点anchor在bodyA的圆心处,所以bodyA会围绕着节点anchor旋转。
b2RevoluteJoint的initialize方法结构如下: bA即bodyA,bB即bodyB,anchor即节点,具体的功能,我在前面都讲过了,就不再赘述了。
另外,如前面提到的,通过设置b2RevoluteJointDef的maxMotorTorque、motorSpeed和enableMotor,可以模拟马达旋转。这三个参数的作用分别如下:
- enableMotor:决定是否使用
- motormotorSpeed:设置最大的角速度
- maxMotorTorque:要达到角速度应用的扭矩力这三个属性是让节点转起来的必要条件,缺一不可!记住哦。
用b2RevoluteJoint实现风扇的效果如下:
完整的代码和注释如下: 代码中用到了我写的静态类LDEasyBox2D,可以有效的简化代码,具体请参考 这里 。
点击刚体,还可以进行拖动,如果对鼠标拖动刚体,我建议你看看之前的 让刚体听我的——鼠标拖动刚体 。 OK 2012-08-28 b2RevoluteJoint关节.rar