SpriteKit:当此类别从未分配给节点时,为什么碰撞中的节点具有类别位掩码4294967295

时间:2016-11-29 05:03:39

标签: swift sprite-kit skspritenode skphysicsbody

在下面的didBegin函数中,其中一个节点的类别位掩码为4294967295.但是,此类别永远不会分配给任何节点。

以下是所有正在使用的位掩码:

struct PhysicsCategory {
    static let None                 : UInt32 = 0
    static let All                  : UInt32 = UInt32.max
    static let Player               : UInt32 = 0b1       // 1
    static let WorldBorder          : UInt32 = 0b10      // 2
    static let TopWorldBorder       : UInt32 = 0b100     // 4
    static let RightWorldBorder     : UInt32 = 0b1000    // 8
    static let Pellet               : UInt32 = 0b10000
}

要重复,All类别(对应于4294967295)永远不会分配给任何节点。那么为什么有一个物理体具有这种类别的掩码呢?此类别位掩码是否隐式分配给物理主体?

func didBegin(_ contact: SKPhysicsContact) {
    print("Collision was detected: \(contact.bodyA.categoryBitMask). \(contact.bodyB.categoryBitMask).")
}

1 个答案:

答案 0 :(得分:7)

categoryBitMaskUInt32,其最大值为 4294967295 ,这也是其默认值(设置了所有位)。引自docs

  

场景中的每个物理主体最多可分配32个不同的物理主体   类别,每个类别对应于位掩码中的一个位。你定义   游戏中使用的蒙版值。与...结合   collisionBitMask和contactTestBitMask属性,你定义哪个   物理机构互相交流,当你的游戏得到通知时   这些互动。

     

默认值为0xFFFFFFFF(设置所有位)。