Box2DJS教程3-1--形状
更新日期:
本节主要介绍形状,以及形状定义和相关的属性。
形状
关于
形状就是物体上的碰撞几何结构。另外形状也用于定义物体的质量。也就是说,你来指定密度,Box2D可以帮你计算出质量。
形状具有摩擦和恢复的性质。形状还可以携带筛选信息,使你可以防止某些游戏对象之间的碰撞。
形状永远属于某物体,单个物体可以拥有多个形状。形状是抽象类,所以在Box2D中可以实现许多类型的形状。如果你有勇气,那便可以实现出自己的形状类型(和碰撞算法)。
形状性质
- 摩擦和恢复
摩擦可以使对象逼真地沿其它对象滑动。Box2D支持静摩擦和动摩擦,但使用相同的参数。
摩擦在Box2D中会被正确地模拟,并且摩擦力的强度与正交力(称之为库仑摩擦)成正比。摩擦参数经常会设置在0到1之间,0意味着没有摩擦,1会产生强摩擦。
当计算两个形状之间的摩擦时,Box2D必须联合两个形状的摩擦参数。
恢复可以使对象弹起,想象一下,在桌面上方丢下一个小球。恢复的值通常设置在0到1之间,0的意思是小球不会弹起,这称为非弹性碰撞;1的意思是小球的速度会得到精确的反射,这称为完全弹性碰撞。
当一个形状发生多碰撞时,恢复会被近似地模拟。这是因为Box2D使用了迭代求解器。当冲撞速度很小时,Box2D也会使用非弹性碰撞,这是为了防止抖动。
- 密度
Box2D可以根据附加形状的质量分配来计算物体的质量以及转动惯量。
直接指定物体质量常常会导致不协调的模拟。因此,推荐的方法是使用b2Body来根据形状设置质量。
形状定义
形状定义用于创建形状。通用的形状数据会保存在b2ShapeDef中,特殊的形状数据会保存在其派生类中。
b2ShapeDef
- type来表示形状类型
- userdata表示用户数据
- localPosition来表示当前位置
- localRotation来表示当前角度
- friction、density、restitution来表示摩擦力、密度、弹性系数
- categoryBits和maskBits来表示碰撞位及位标识(可以用来过滤一些碰撞)
- groupIndex来表示组号,这个组号可以用来过滤还比位标识优先
b2CircleDef
- 继承于b2ShapeDef
- type为e_circleShape
- radius来表示半径值
b2BoxDef
- 继承于b2ShapeDef
- type为e_ boxShape
- extents来表示区域值
b2PolyDef
- 继承于b2ShapeDef
- type为e_ polyShape
- vertices来表示顶点
- vertexCount来表示顶点数,目前顶点数最多支持8个
返回总目录
码生艰难,写文不易,给我家猪囤点猫粮了喵~
查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢
如果你想要关注日常生活中的我,欢迎关注“牧羊的猪”公众号噢