什么是Arbiter

作者: ladeng6666 分类: Nape 发布时间: 2014-10-27 13:41 阅读: 5,043

在《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

点击下载源文件

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

4条评论
  • Pingback: PreListener实现单边碰撞 - Ladeng6666
  • qgqceo

    2014 年 10 月 29 日 上午 3:06

    多谢拉登大叔

  • ywx620

    2014 年 11 月 23 日 上午 9:48

    这个在什么地方会应用得到呢?

    1. ladeng6666

      2014 年 11 月 23 日 下午 12:46

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

发表评论

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