Box2d学习笔记三:box2d中几个重要的类

我们已经知道box2d中的唯一物种:刚体,然而仅仅一个刚体对象并不能完成相应的物理模拟。如果看过box2d的帮助文档就知道,b2Body中提供的函数和属性中,并没有我们需要的物理属性,可以回忆一下,我们读高中那会儿,上知天文下知地理,那些物理量到现在还能记住一些。

为了很好的模拟现实的物理世界,box2d中当然会提供各种物理量,而这些物理量表现了刚体的各种性质,比如:摩擦力,恢复系数,力,扭矩等等,与高中不同的是,我们现在不需要那笔去计算什么什么运动轨迹,运动状态,因为这些box2d会很好的帮我们计算了,我要做的是,了解各物理量并合适的设置他们,其它的交给物理引擎吧!


打开box2d帮助文档,发现b2Body中并没有提供相应的物理量,细心的人们会发现,里面有很多得到类的函数,这些类之前并没有见过。下面就来介绍这些重要的类,就是他们完成了在box2d中的物理属性设置。

框架(b2Fixture):封装了物理属性,用来完成各种物理模拟。

b2Fixture *  CreateFixture (const b2FixtureDef *def) 这是b2Body的方法,创建之后就表示该刚体有了框架,同框架的属性也是他的了。注意(可以创建多个框架)
形状(b2Shape):描述了框架的轮廓,它是附加在框架上,一起提供给刚体的。

关节(b2Joint):用来连接刚体,对刚体的运动做限制。(可以联系人体的关节,有了关节,两块骨头就不能胡乱运动了)

Ok,靠他们就能完成box2d中的各种物理模拟了,下面是练习的代码:

上节中我们已经创建了世界和边界,所以这里就直接写出关键代码了。

//创建刚体

b2BodyDef bodyDef1;
bodyDef1.position.Set(size.width/2/PTM_RATIO,size.height/2/PTM_RATIO);
bodyDef1.type=b2_dynamicBody; //设置刚体为动态的
b2Body *body1=world->CreateBody(&bodyDef1);

现在运行程序,并不能看到刚体,因为它还没有形状,只是知道世界中有一个刚体了,需要框架为它附加形状,所以先创建形状:

//使用多边形

b2PolygonShape shape1;
shape1.SetAsBox(50.0f/PTM_RATIO,50.0f/PTM_RATIO);

为了节约时间,这里就用了最简单的方式,创建了一个矩形,当然引擎中还提供了其它形状,可以查看帮助文档。

光有形状还不行,形状需要一个承载它的实体,它就是框架:

b2FixtureDef fixtureDef1;
fixtureDef1.shape=&shape1;  //在这里就把形状和框架联系起来了
fixtureDef1.density=1.0f;
fixtureDef1.friction=0.2f;
fixtureDef1.restitution=0.8f;

最后创建框架:

body1->CreateFixture(&fixtureDef1);

OK,现在就能看到刚体了,受重力作用,做自由落体运动。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值