swift和spritekit中的冲突

时间:2017-12-14 09:48:42

标签: ios swift sprite-kit collision

我正在使用SwiftSpritekit进行简单的游戏。

我的场景中有4个节点:nodeA1,nodeA2,nodeB1和nodeB2。

所以 nodeA1可以触及nodeA2 nodeB1可以触及nodeB2

我想要

  

nodeA2触摸nodeB2没有nodeA1触摸nodeB1和nodeB2和nodeB1   是一样的。

这可能吗?

1 个答案:

答案 0 :(得分:1)

是的,无论你是否意味着碰撞或接触,这绝对是可能的

如果你能澄清这一点,我会告诉你如何做到这一点。 (我可以告诉你两者,但这将是额外的代码。)

编辑 - 此处描述了碰撞的代码:

  1. 定义唯一类别,确保您的课程为SKPhysicsContactDelegate,并让自己成为物理联系代表:

    //物理类别 let nodeA1Category:UInt32 = 1<< 0 // b' 00001' let nodeA2ategory:UInt32 = 1<< 1 // b' 00010' let nodeB1Category:UInt32 = 1<< 2 // b' 00100' let nodeB2ategory:UInt32 = 1<< 3 // b' 01000'

    类GameScene:SKScene,SKPhysicsContactDelegate {    physicsWorld.contactDelegate = self

  2. 分配类别(通常在didMove(to view:)

    nodeA1.physicsBody.catgeoryBitMask = nodeA1Category nodeA2.physicsBody.catgeoryBitMask = nodeA2ategory nodeB1.physicsBody.catgeoryBitMask = nodeB1Category nodeB2.physicsBody.catgeoryBitMask = nodeB2ategory

  3. (确保您已为isDynamic属性设置为true的每个节点创建了物理实体)

    1. 设置碰撞:

      nodeA1.physicsBody?.collisionBitMask = nodeA2ategory // A1与A2发生碰撞 nodeA2.physicsBody?.collisionBitMask = nodeA1Category // A2与A1碰撞

      nodeB1.physicsBody?.collisionBitMask = nodeB2ategory // B1与B2发生碰撞 nodeB2.physicsBody?.collisionBitMask = nodeB1Category // B2与B1碰撞

      nodeA2.physicsBody?.collisionBitMask = nodeB2ategory // A2与B2发生碰撞 nodeB2.physicsBody?.collisionBitMask = nodeA2ategory // B2与A2碰撞

    2. 您现在应该获得所需的所有冲突,但没有联系人通知。如果你想要做这些节点碰撞的事情,你必须实现contactTest位掩码和didBeg(contact:)方法。