碰撞

    碰撞筛选允许你启用或者阻止形状之间碰撞的发生,引擎支持使用类型,组位掩码来进行碰撞筛选。

    Cocos2d-x 有 32 个支持的碰撞类型,对于每个形状都可以指定其所属的类型。还可以指定有哪些类型可以与这个形状进行碰撞,这些是通过掩码来完成的。例如:

    C++

    你可以通过检查判断类型和掩码来确定碰撞的发生:

    C++

    碰撞组允许你指定一个完整的组索引,你可以让具有相同组索引的形状总是一直碰撞(正索引)或者一直不碰撞(负索引和零索引)。对于组索引不同的形状。可以根据类型和掩码进行筛选,也就是说,组筛选比类型筛选具有更高的优先级。

    回想一下之前提到的术语,关节是把不同刚体连接在一起的一种方式,就好像人体的关节是把人体的不同部位连接在一起。关节连接了不同的刚体,刚体可以是静态的,每一个关节类都是 的子类,你可以通过设置 joint->setCollisionEnable(false) 来避免相互关联的刚体互相碰撞。关节的定义需要你提供一些几何数据,大多关节都是通过锚点来定义的,其余一些关节有各自的定义方式。

    碰撞(Contact) 是一种由物理引擎创建的用于管理两个形状碰撞的对象。 对象不是由用户手动创建的,而是自动创建的。这里有两个相关的术语:

    你可以从一个 contact 对象中获取到 ,从而获取到刚体:

    你可以通过碰撞监听器来访问碰撞,碰撞监听器支持四种事件:begin, pre-solve, post-solve, separate

    你还可以使用 EventListenerPhysicsContactWithBodies,, EventListenerPhysicsContactWithGroup 来监听你感兴趣的刚体,形状,组的一些事件。额外的,还需要设置与物理碰撞相关的掩码。注意:默认情况下单单创建事件监听器,是收不到碰撞事件的。

    示例:

    C++

     碰撞  - 图3