Trade Off

supercalifragilisticexpialidocious

Box2d的简单使用

真不太想写,因为写这篇日志应该比写一个程序都要复杂。

我介绍的是box2d引擎在iphone上的使用方法,网上也有不少介绍的,我再简单啰嗦一番:

首先我们需要一个物理世界:b2world *world;在世界中创造各种各样的body,当然这些body都是刚体,如同经济学中的刚性需求那样,这里值得是形状不会被压扁的坚固物体。这些body默认在实例化后是静态的,除非你明显得把他们的type参数改成b2_dynamicBody,他们就能参与物理运动了。你可以给他们加入密度、弹性、摩擦等参数。这些都是每个body的属性,而这些body是需要刚刚的world创建的,而创建的函数需要一个配置单,就是一个结构体而已。

body出现之后你还不能看到,因为还需要另外的两个重要性质:fixture和shape,这里的shape有两种,一个是多边形,一个是圆形;创建shape后定义一些参数,然后把这个对象传递给fixture的对象,fixture被我叫做材质,刚才介绍的密度、弹性、摩擦等属性就是在这里定义的。当然,fixture有个shape属性,把刚刚实例化的shape对象给他即可。最后用body对象的CreateFixture函数生成fixture。这样应该就能看到你创建的物理实体了。

下面介绍一些刚刚遗漏的概念,在这个物理世界中,我们需要定义一个重要的量——重力,我们所有创建的物理实体都将按照这个重力的方向移动,而这里的重力实际上指的是一个向量,比如说是(0,-10),这样就会向着y轴-10的方向移动,而负坐标是y轴向下的,刚刚实验过,如果用(0,-100)的话,物体下移的速度会比(0,-10)的快很多,这也很明显。

另一个有意义的概念就是休眠了,其实这是创建“世界”的又一个参数,意思是如果有物体到达了无法移动的地方,比如边界,或者说出去了边界,引擎应该就不再计算它的一些数据了,这理所应当,怎么还需要解释呢?我们当然希望引擎能够把主要的计算力量给予需要的物理实体。

上面提到了一个区域的概念,是的,我们应该划定一个区域,在这个区域中的物体参与物理运算,外面的就不再参与了,但这里定义一个区域也是用了向量的方法,而且这个区域也算作一个body,有些难以理解。目前掌握得不好,就不再详述了。

Comments