一、Box2D的一些概念
1.1 刚体,质点,只有位置没有大小
- 静态刚体:静态刚体没有质量,没有速度,只可以手动来改变他的位置
- 运动刚体:运动刚体没有质量,但是可以有速度,可以自己更新位置
- 动态刚体:动态刚体有质量也有速度
创建刚体
b2BodyDef bodyDef; // 定义刚体 bodyDef.type = b2_dynamicBody; // 定义刚体的类型b2_staticBody*, b2_kinematicBody, b2_dynamicBody bodyDef.position.Set(x/PTM_RATIO, y/PTM_RATIO); // 设置刚体的位置,进行单位转换,box2d以米作单位,所以把像素转换成米,32像素为1米 b2Body* groundBody = world->CreateBody(&bodyDef); // 根据刚体定义创建刚体
1.2 形状,添加到刚体上进行碰撞,具有摩擦和恢复等材料特性
b2PolygonShape dynamicBox; // 定义一个形状 dynamicBox.SetAsBox(.5f, .5f); // 设置这个盒子的中点,则盒子长宽为1m
1.3 关联,关联是一种附加到刚体的属性,一个刚体可以有多个关联。
b2FixtureDef fixtureDef; // 定义一个关联 fixtureDef.shape = &dynamicBox; // 关联的形状 fixtureDef.density = 1.0f; // 密度 fixtureDef.friction = 0.3f; // 摩擦 body->CreateFixture(&fixtureDef); // 创建刚体关联
1.4 链接,链接可以联系多个刚体
b2RevoluteJointDef rjd; // 定义一个链接 rjd.Initialize(m_attachment, m_platform, b2Vec2(0.0f, 5.0f)); rjd.maxMotorTorque = 50.0f; rjd.enableMotor = true; world->CreateJoint(&rjd);
1.5 约束
1.6 世界
b2Vec2 gravity; // 定义重力 gravity.Set(0.0f, -10.0f); // 设置重力的方向为-10 world = new b2World(gravity); // 创建世界 world->SetAllowSleeping(true); // world->SetContinuousPhysics(true);
原文链接:http://blog.linguofeng.com/pages/language/c/box2d.html