学习 Box2D 个人笔记(九)b2GearJoint
2013-01-03 02:28
218 查看
齿轮关节就是齿轮 。一个物体转动或运动带动领一个物体转动或运动。
效果如图:
首先:
GearJoint需要两个关节,RevoluteJoint或PrismaticJoint。
所以首先我们要定义一个 RevoluteJoint:
// 转动关节
b2RevoluteJoint * revolutejoint;
b2RevoluteJointDef rjd;
rjd.collideConnected = true;
{
//这是设置 驱动力,以及转动最大的速度
rjd.motorSpeed = -4;
rjd.maxMotorTorque = 40;
rjd.enableMotor=true;
}
rjd.Initialize(groundBody,bodyB,bodyB->GetWorldCenter());//前两个参数设置要转的body和相对的body,第三个指位置。
revolutejoint = (b2RevoluteJoint*)world->CreateJoint(&rjd);
{
//设置limit 让节点在一定的范围内转动
// revolutejoint->SetLimits(0, 3.14/6);
// revolutejoint->EnableLimit(true);
}
接下来 我们要定义一个PrismaticJoint(当然也可以定义两个转动的 两个圆形相互转动)
//限制移动方向的关节
b2PrismaticJoint *prismaticjoint;
b2PrismaticJointDef pjd;
pjd.collideConnected = true;
pjd.Initialize(bodyA, groundBody, bodyA->GetWorldCenter(),b2Vec2::b2Vec2(1,0));
prismaticjoint = (b2PrismaticJoint*)world->CreateJoint(&pjd);
接下来就是最后一步了 .生成b2GearJoint
//齿轮关节
b2GearJoint *gearjoint;
b2GearJointDef gjd;
gjd.bodyA = bodyA;
gjd.bodyB = bodyB;
gjd.joint1 = prismaticjoint;
gjd.joint2 = revolutejoint;
gjd.ratio = -1.0f / (20.0/PTM_RATIO);
gearjoint = (b2GearJoint*)world->CreateJoint(&gjd);
注意这两个body我都没有设置摩擦力,也许有的人想,通过摩擦力来实现齿轮关节的效果可以么 ,可以。
但是那样不方便控制 ratio。也就是说移动的比例。还有方向。
ok。 Joint 方面的基本都完事了 .
效果如图:
首先:
GearJoint需要两个关节,RevoluteJoint或PrismaticJoint。
所以首先我们要定义一个 RevoluteJoint:
// 转动关节
b2RevoluteJoint * revolutejoint;
b2RevoluteJointDef rjd;
rjd.collideConnected = true;
{
//这是设置 驱动力,以及转动最大的速度
rjd.motorSpeed = -4;
rjd.maxMotorTorque = 40;
rjd.enableMotor=true;
}
rjd.Initialize(groundBody,bodyB,bodyB->GetWorldCenter());//前两个参数设置要转的body和相对的body,第三个指位置。
revolutejoint = (b2RevoluteJoint*)world->CreateJoint(&rjd);
{
//设置limit 让节点在一定的范围内转动
// revolutejoint->SetLimits(0, 3.14/6);
// revolutejoint->EnableLimit(true);
}
接下来 我们要定义一个PrismaticJoint(当然也可以定义两个转动的 两个圆形相互转动)
//限制移动方向的关节
b2PrismaticJoint *prismaticjoint;
b2PrismaticJointDef pjd;
pjd.collideConnected = true;
pjd.Initialize(bodyA, groundBody, bodyA->GetWorldCenter(),b2Vec2::b2Vec2(1,0));
prismaticjoint = (b2PrismaticJoint*)world->CreateJoint(&pjd);
接下来就是最后一步了 .生成b2GearJoint
//齿轮关节
b2GearJoint *gearjoint;
b2GearJointDef gjd;
gjd.bodyA = bodyA;
gjd.bodyB = bodyB;
gjd.joint1 = prismaticjoint;
gjd.joint2 = revolutejoint;
gjd.ratio = -1.0f / (20.0/PTM_RATIO);
gearjoint = (b2GearJoint*)world->CreateJoint(&gjd);
注意这两个body我都没有设置摩擦力,也许有的人想,通过摩擦力来实现齿轮关节的效果可以么 ,可以。
但是那样不方便控制 ratio。也就是说移动的比例。还有方向。
ok。 Joint 方面的基本都完事了 .
相关文章推荐
- 学习 Box2D 个人笔记(二)b2body .
- 学习 Box2D 个人笔记(七)b2DistanceJoint
- 学习 Box2D 个人笔记(十)碰撞检测
- 学习 Box2D 个人笔记(三)ApplyForce
- 学习 Box2D 个人笔记(八)b2RevoluteJoint
- 学习 Box2D 个人笔记(一)b2World
- 学习 Box2D 个人笔记(八)b2PulleyJoint
- 学习 Box2D 个人笔记(十一)vertexhelper
- 学习 Box2D 个人笔记(六)PrismaticJoint
- 学习 Box2D 个人笔记(五)debugDraw
- Box2D个人学习笔记 - 介绍
- Box2D个人学习笔记 - HelloWorld
- 学习 Box2D 个人笔记(四)b2MouseJoint
- JSON解析----个人学习笔记
- 个人GRUB学习笔记
- linux 个人学习笔记(没有干货)
- 深度学习笔记有深度学习领军人物个人主页
- 个人学习笔记5之--子查询与表表达式
- python学习(仅作为个人学习笔记,记录零散知识点)
- Deep Learning(深度学习)学习笔记整理系列之LeNet-5卷积参数个人理解