文章目录
  1. 1. 形状
    1. 1.1. 关于
    2. 1.2. 形状性质
    3. 1.3. 形状定义
    4. 1.4. 返回总目录

本节主要介绍形状,以及形状定义和相关的属性。

形状


关于

形状就是物体上的碰撞几何结构。另外形状也用于定义物体的质量。也就是说,你来指定密度,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个

返回总目录

码生艰难,写文不易,给我家猪囤点猫粮了喵~

B站: 被删

查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢

如果你想要关注日常生活中的我,欢迎关注“牧羊的猪”公众号噢

作者:被删

出处:https://godbasin.github.io

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文章目录
  1. 1. 形状
    1. 1.1. 关于
    2. 1.2. 形状性质
    3. 1.3. 形状定义
    4. 1.4. 返回总目录