什么是Arbiter

在《Nape刚体碰撞检测》一节中学习InteractionCallback时,我们曾提到过Arbiter类,很显然这个单词我们不认识,更说不上知道它是干嘛的了。那它的作用到底是什么呢?拉登大叔告诉你。

Nape中的Arbiter类似于Box2D中的b2Contact类,用来存储碰撞时的碰撞对象、碰到点、碰撞冲量等信息。同样的,我们无需手动创建Arbiter对象,Npae会在碰撞时自动创建Arbiter对象,并将上面提到的碰撞信息保存到这个对象中。

一个Arbiter对象中包含的碰撞信息包括:

  • body1:Body:碰撞时的第1个刚体,与shape1.body一致。
  • body2:Body:碰撞时的第2个刚体,与shape2.body一致
  • collisionArbiter:CollisionArbiter:保存了具体的碰撞信息的一个CollisionArbiter对象,这些信息包括:
  • fluidArbiter:FluidArbiter:如果碰撞刚体中包含浮力刚体,则可以通过该属性获取浮力碰撞相关的信息,包括:
  • buoyancyImpulse():浮力冲量,和dragImpulse():流体阻力冲量
  • isSleeping : Bool:当前Arbiter对象是否处在睡眠状态
  • shape1:Shape:碰撞时的第1个刚体形状。该shape对象与InteractionListener中设定的options1没有任何关系,而是取shape1.id < shape2.id的规则来保存。id的大小与形状创建的先后顺序有关
  • shape2:Shape:碰撞时的第2个刚体形状。

接下来更为详细的信息保存在了CollisionArbiter中

CollisionArbiter

  • dynamicFriction、staticFriction、rollingFriction:运动摩擦系数、静止摩擦系数和旋转摩擦系数
  • elasticity:碰撞时的弹性系数
  • referenceEdge1:碰撞时参与碰撞的边,如果是圆形刚体碰撞,则返回null。
  • referenceEdge2:碰撞时参与碰撞的边,如果是圆形刚体碰撞,则返回null。

features

  • contacts:碰撞点。

colarbiter

  • normal:碰撞边的法向量,始终由shape1指向shape2
  • normalImpulse():沿normal方向的碰撞冲量
  • tangentImpulse():沿水平方向的碰撞冲量
  • rollingImpulse():因摩擦使刚体旋转的冲量值

点击下面的图片,可以动态的查看arbiter的相关属性。其中,红色形状表示body1/shape1,蓝色形状表示body2/shape2,形状内的绘制的线条,表示形状碰撞时对应的referenceEdge。绿色线条表示normal,红色圆圈表示碰撞点位置。

CollisionArbiterInfo

点击下载源文件

联系作者

公众号:拉小登 | 微博:拉登Dony | B站:拉小登Excel

文章分类 > Nape

4 Replies to “什么是Arbiter”

  1. 很多啊,比如在碰撞位置添加爆炸特效,比如在碰撞时获取碰撞的两个缸体,比如碰撞过程中获取碰撞冲量,来决定是否要摧毁被碰撞的刚体(小鸟和猪的碰撞)等等,具体要看你实际的使用需求啦!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注