box2d核心概念应用到游戏之初步理解

时间:2023-02-08 14:54:53

说明:

box2d系列学习心得系基于网上传播的相应的文章撰写的,个人添加的部分文字已添加下划线,其余部分均系转载或摘抄:

1、来源一:Box2D v2.1.0用户手册中文翻译

2、来源二:complex_ok的专栏

box2d核心概念应用到游戏之初步理解:

1、 利用world模拟创建游戏的物理世界;

2、 利用body创建各种通用物体;

3、 利用fixtures给予通用物体基本属性(密度、摩擦力)以仿真各种真实物体;

4、 利用joint将两个或多个物体(body)关联到一起,创建组合一起运动的物体,如旋转机器人,类似使用组合多个图片实现动画效果的物体。

5、 当游戏中各种物体状态发生改变,导致出现碰撞时,contact及contact constraint 就出现了,contact用来表示两个物体之间出现了碰撞,contactconstraint用于限制碰撞的影响范围。

6、 通常游戏需要对物体的碰撞进行处理,以实现游戏效果,此时需要利用ContactListener相应的接口消除部分物体的碰撞、记录发生碰撞的物体状态以立即实现游戏效果。


以下部分系摘录于网上传播的相应的文章

1.5 核心概念(CoreConcepts)

Box2D中有一些基本对象, 这里我们先做一个简要的定义, 随后的文档会有更详细的描述。

形状(shape)

2D几何对象, 比如圆形(circle)或多边形(polygon)。

刚体(rigid body)

十分坚硬的物质, 坚硬得像钻石,它上面任意两点之间的距离都保持不变。在后面的讨论中,我们用物体(body)来代替刚体。

夹具(fixture)

fixture将形状绑定到物体之上, 并有一定的材质属性, 比如密度(density), 摩擦(friction)和恢复(restitution)。

(译注:一个物体和另一物体碰撞, 碰撞后速度和碰撞前速度的比值会保持不变,这比值就叫恢复系数。)

约束(constraint)

约束是个物理连接, 用于消除物体的*度。在2D中, 物体有3个*度(水平,垂直,旋转)。如果我们把一个物体钉在墙上(像钟摆那样), 那就把它约束到了墙上。这个时候,此物体就只能绕着钉子旋转, 所以这个约束消除了它2个*度。

(译注:简单的说, 需要用几个参数来确定物体的空间状态, 这个物体就有几个*度。在二维中,完全没有约束的条件下, 我们要确定物体的状态, 要有x坐标, y坐标, 旋转角这三个参数, 所以*度为3。如果物体被钉在墙上, 只要有旋转角,就可以完全确定物体的状态,有了钉子这个约束,物体*度就变成了1。)

接触约束(contact constraint)

一种特殊的约束, 设计的目的是为了防止刚体被穿透, 也用于模拟摩擦和恢复。接触约束不用你来创建, 它们会自动被Box2D生成。

关节(joint)

关节就是种约束, 用于将两个或多个body固定到一起。Box2D支持不同的关节类型:转动(revolute),棱柱(prismatic),距离(distance)等。一些关节可以有限制(limits)和马达(motors)。

关节限制(joint limit)

关节限制限定了一个关节的运动范围。例如人类的胳膊肘只能在某一角度范围内运动。

关节马达(joint motor)

根据关节的*度, 关节马达可以驱动关节所连接的物体。例如, 你可以使用一个马达来驱动一个肘的旋转。

世界(world)

一个物理世界就是各种, 刚体(bodies), 夹具(fixtures), 约束(constraints)相互作用的集合。 Box2D支持创建多个世界, 但这通常没有必要。