Box2D的相关知识

  cocos2d-x引擎支持两个物理引擎,分别为Box2D和Chipmunk。通常使用为Box2D。以下为Box2D中的概念。世界(World),刚体(body)、刚体定义(BodyDef)、关联(Fixture)、关联定义(FixtureDef)、形状(Shape)、连接(Joint)、以及链接定义(JointDef)。

世界:
创建世界需要两个步骤:1、生成重力向量。2、根据重力向量生成对象。例如:
//生成一个重力向量
b2Vec2 gravity;
gravity.Set(0.0f,-10.0f);
//根据重力向量生成世界对象
b2World *world = new b2World(gravity,true);

刚体及刚体定义:
刚体代表一个质点,因此它只有位置,没有大小。刚体分为三类:
1、静态刚体(Static Body)。没有质量、没有速度。绝对静止。
2、棱柱刚体(Prismatic Body)。没有质量,但可以有速度。引擎会根据速度计算并更新它的位置。
3、动态刚体(Dynamic Body)。可以有质量、可以有速度。最常用的刚体。
与世界类似刚体定义也分为两步:1、创建刚体定义。2、根据缸体定义生成刚体。eg:
//生成刚体定义
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0,0);
//根据刚体定义生成刚体
b2Body *groundBody = world->CreateBody(&groundBodyDef);

形状:
形状通过关联附加到刚体上,刚体就具有了视觉上的外形。刚体可以有多个关联,因此也就可以有多个形状,Box2D称为组合形状(compound Shapes),这样可以构成更复杂的形状。eg:
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(0.5f,0.5f);

关联及关联定义:
创建关联:1、创建关联定义。2、通过世界相关方法创建关联。eg:
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.dynsity = 1.0f;
fixtureDef.friction = 3.0f;
//根据关联定义生成关联
b2Fixture *fixture = body->CreateFixtrue(&fixtureDef);

链接及链接定义:
链接用来联系多个刚体,使他们产生相互影响。链接有很多类型,必须选择你需要的相应类型。同样两个步骤:1、定义。2、根据定义创建。eg:
b2LineJointDef jointDef;
b2Vec2 axis(2.0f,1.0f);
axis.Normalize();
jointDef.Initialize(ground,body,b2Vec2(0.0f,8.5f),axis);
jointDef.motorSpeed = 0.0f;
jointDef.maxMotorForce = 100.0f;
jointDef.enableMotor = true;
jointDef.lowerTransltaion = -4.0f;
jointDef.upperTranslation = 4.0f;
jointDef.enableLimit = true;
//根据链接定义生成链接
b2Joint *joint = m_world->CreateJoint(&jointDef);


本篇博客出自 阿修罗道 ,转载请注明出处: http://blog.csdn.net/fansongy/article/details/8846403


 

posted @ 2013-04-24 21:35  javawebsoa  Views(176)  Comments(0Edit  收藏  举报