1.刚体
即是物理学中的质点,只有位置,没有大小,它又可以区分为以下几类
静态刚体:静态刚体没有质量,没有速度,只可以手动来改变他的位置
棱柱刚体:棱柱刚体没有质量,但是可以有速度,可以自己更新位置
动态刚体:动态刚体有质量也有速度
物理引擎需要首先定义一个描述类,然后再根据描述类通过世界创建某个对象。创建刚体时需要有两个步骤,一是生成一个刚体定义,二是根据刚体定义生成刚体。在刚体创建时定义中的信息会被复制,也就是说创建完成后刚体只要没被释放掉,就还可以重复使用。
//定义刚体
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(screenSize.width/2/PTM_RATIO, screenSize.height/2/PTM_RATIO);
//生成刚体
b2Body* groundBody = world->CreateBody(&groundBodyDef);
2.形状
通过关联添加到刚体上,碰撞可以根据形状来判定,具有摩擦和恢复等材料特性。
b2PolygonShape groundBox;
// bottom
groundBox.SetAsBox(screenSize.width/2/PTM_RATIO, 0, b2Vec2(0, -screenSize.height/2/PTM_RATIO), 0);
3.关联
关联是一种附加在刚体上的属性,一个刚体可以有多个关联,创建关联时,需要定义关联的信息,然后通过刚体创建关联,当关联被创建时关联定义中的信息也会被保留,也可以重用
//定义并创建关联
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body->CreateFixture(&fixtureDef);
4.世界
世界是遵循物理的空间,以上的所有都存在于世界中,可以创建多个世界,但很少这样用
创建世界需要两个步骤,一是生成重力向量,二是根据重力生成世界对象
//生成重力向量
b2Vec2 gravity;
gravity.Set(0.0f, -10.0f);
//生成世界对象
bool doSleep = true;
world = new b2World(gravity);
world->SetAllowSleeping(doSleep);
world->SetContinuousPhysics(true);